Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不止一种utf-8_Java_Parsing_Encoding_Utf - Fatal编程技术网

Java不止一种utf-8

Java不止一种utf-8,java,parsing,encoding,utf,Java,Parsing,Encoding,Utf,我对编码有一种奇怪的问题。我正在编写一个java程序,可以读取和写入文件。读和写都被设置为uft-8,而且它似乎工作得很好。 当我在notepad++中打开文件并选择“encoding”时,它将被设置为“utf-8”,这是应该的。问题是,如果我选择“转换为utf-8”(在记事本++)中)选项,我的文档将被标记为脏文档,切换到十六进制并在diff中查看这两个选项将显示差异。 真正的问题是第二个版本将无法正确解析。以双斜杠开头的行(应该是注释并且被解析器忽略)被解释为“?/”。有人知道是什么导致了这

我对编码有一种奇怪的问题。我正在编写一个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?我想你的问题是。