【发布时间】:2021-07-05 02:55:45
【问题描述】:
我有一个创建 csv 文件的应用程序。然后由 excel makro 导入该文件。 makro 需要使用 UTF-16LE 编码对文件进行编码。问题是,我无法在某些设备上使用此编码。
到目前为止,我使用字符集 UTF-16 来创建文件。当我用记事本++打开文件时,它显示文件是用UTF-16LE编码的。现在我有一个新设备,当我用它创建 csv 文件时,notepad++ 显示编码是 UTF-16BE。结果,当我尝试使用 excel makro 导入文件时出现错误。
我尝试将编码指定为 UTF-16LE,根据 android 的 developer page,它应该是一个有效的字符集。但是notepad++无法识别我文件的编码,excel makro无法读取它(对于旧设备和新设备)。
我可以通过 notepad++ 将这两种情况下的编码转换为 UTF-16LE,并使用我的 makro 成功导入文件,但我需要从我的应用程序中以正确的格式创建文件。
旧设备的安卓版本5.1
较新的设备有安卓版本9.0
这是我的代码:
File file = new File("some_name");
if (file.exists()) {
file.delete();
}
file.getParentFile().mkdirs();
file.createNewFile();
Writer osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-16LE"); //Or "UTF-16"
osw.write("foo");
osw.write("bar");
osw.close();
如何在新设备上使用 UTF-16LE 编码?
我确实看过this answere 并像这样实现它:
Writer osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-16LE"); //Or "UTF-16"
osw.write(new String(("foo").getBytes("UTF-16LE"), "UTF-16LE"));
osw.write(new String(("bar").getBytes("UTF-16LE"), "UTF-16LE"));
osw.close();
我也使用了StandardCharsets.UTF_16LE,但它并没有改变任何东西。编码仍然无法被notepad++识别,也没有被makro导入。
【问题讨论】:
-
你见过:Showing a UTF16-LE encoded string in textview for Android,即确保你正在编写 UTF16-LE 字符串
-
建议使用
StandardCharsets.UTF_16LE,而不是将编码作为字符串提供。 -
@MorrisonChang 我已经尝试了这两个建议,遗憾的是这并没有改变任何东西:/我已经更新了我的问题。
-
运行 Android 9.0 的较新设备是什么?
-
Android 9 中的 UTF 解码器行为发生了变化(请参阅 here)。创建 CSV 文件的数据来源是什么?
标签: java android encoding character-encoding utf-16le