Java不止一种utf-8
我对编码有一种奇怪的问题。我正在编写一个java程序,可以读取和写入文件。读和写都被设置为uft-8,而且它似乎工作得很好。 当我在notepad++中打开文件并选择“encoding”时,它将被设置为“utf-8”,这是应该的。问题是,如果我选择“转换为utf-8”(在记事本++)中)选项,我的文档将被标记为脏文档,切换到十六进制并在diff中查看这两个选项将显示差异。Java不止一种utf-8,java,parsing,encoding,utf,Java,Parsing,Encoding,Utf,我对编码有一种奇怪的问题。我正在编写一个java程序,可以读取和写入文件。读和写都被设置为uft-8,而且它似乎工作得很好。 当我在notepad++中打开文件并选择“encoding”时,它将被设置为“utf-8”,这是应该的。问题是,如果我选择“转换为utf-8”(在记事本++)中)选项,我的文档将被标记为脏文档,切换到十六进制并在diff中查看这两个选项将显示差异。 真正的问题是第二个版本将无法正确解析。以双斜杠开头的行(应该是注释并且被解析器忽略)被解释为“?/”。有人知道是什么导致了这
真正的问题是第二个版本将无法正确解析。以双斜杠开头的行(应该是注释并且被解析器忽略)被解释为“?/”。有人知道是什么导致了这种情况,以及如何修复它吗?怎么可能有不止一种utf-8?我真的不明白为什么Java utf-8解码器没有透明地忽略任何初始BOM,但不幸的是它没有 该行为在大约十年前被报告为一个bug,但Sun决定不修复它,因为该修复可能会打破现有的解决方法: 一种可能的解决方法是使用PushbackReade,查看第一个字符,如果是BOM,则将其丢弃:
FileInputStream fis = new FileInputStream("...");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
PushbackReader pr = new PushbackReader(isr);
int c = pr.read();
if(c != 0xFEFF) {
// not a BOM
pr.unread(c);
}
// use pr as your reader
为什么要将
UTF-8
文本转换为UTF-8
?还是我遗漏了什么?Java在内部将字符串存储为UTF-16nrk:问题是,在其他计算机(可能有其他编辑器)上,当我编辑文件时,它存储为“另一种UTF-8”。davek:即使java在内部存储为utf-16,如果我使用utf-8编写代码,这也不应该是一个问题,对吗?两个文件之间的区别是什么?什么变化?通过查看记事本++的右下角,可以看到文件编码。你在那里看到了什么<代码>UTF-8或ANSI as UTF-8?我想你的问题是。