小编典典
这里有几个因素在起作用:
文本文件没有用于描述其编码的内在元数据(就尖括号税而言,XML受欢迎是有原因的)
Windows的默认编码仍然是8位(或双字节)“ ANSI ”字符集,其值范围有限-以这种格式编写的文本文件不可移植
为了从ANSI文件中识别出Unicode文件,Windows应用程序依赖文件开头的字节顺序标记(严格意义上不是这样-Raymond Chen解释)。理论上,BOM可以告诉您数据的字节序(字节顺序)。对于UTF-8,即使只有一个字节顺序,Windows应用程序也依靠标记字节来自动确定它是Unicode(尽管您会注意到Notepad在其打开/保存对话框中有一个编码选项)。
说Java损坏是错误的,因为Java不会自动编写UTF-8 BOM。例如,在Unix系统上,将BOM表写入脚本文件将是错误的,并且许多Unix系统使用UTF-8作为其默认编码。有时候,您也不希望在Windows上使用它,例如将数据追加到现有文件中时:fos = new FileOutputStream(FileName,Append);
这是一种将UTF-8数据可靠地附加到文件的方法:
private static void writeUtf8ToFile(File file, boolean append, String data)
throws IOException {
boolean skipBOM = append && file.isFile() && (file.length() > 0);
Closer res = new Closer();
try {
OutputStre