我有一个创建 csv 文件的应用程序。然后由 excel makro 导入该文件。makro 需要使用 UTF-16LE 编码对文件进行编码。问题是,我无法在某些设备上使用此编码。
到目前为止,我使用字符集 UTF-16 来创建文件。当我用记事本++打开文件时,它显示文件是用UTF-16LE编码的。现在我有了一个新设备,当我用它创建 csv 文件时,notepad++ 显示编码是 UTF-16BE。结果,当我尝试使用 excel makro 导入文件时出现错误。
我尝试将编码指定为 UTF-16LE,根据android的开发人员页面,它应该是一个有效的字符集。但是记事本++无法识别我的文件的编码,并且excel makro无法读取它(对于旧设备和新设备)。
在这两种情况下,我都可以通过 notepad++ 将编码转换为 UTF-16LE,并使用我的 makro 成功导入文件,但我需要从我的应用程序中以正确的格式创建文件。
旧设备具有 android 版本5.1
较新的设备具有 android 版本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 编码?
我确实看了一下这个答案并像这样实现它:
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 也无法导入该编码。