Java 修复字符串中的混合编码

Java 修复字符串中的混合编码,java,character-encoding,Java,Character Encoding,我有一个包含以下字符串的文件: AAdοbe Dοcument Clοud 如果在记事本++中查看。在十六进制视图中,字符串如下所示: AAdοbe Dοcument Clοud 如果我用Java读取文件,字符串如下所示: AAdοbe Dοcument Clοud 如何在Java中获得与Notepad++相同的编码?您必须在文件读取器中设置编码 new FileReader(fileName, StandardCharsets.UTF_8) 您必须在此文件读取器中设置编码

我有一个包含以下字符串的文件:

AAdοbe Dοcument Clοud
如果在记事本++中查看。在十六进制视图中,字符串如下所示:

AAdοbe Dοcument Clοud

如果我用Java读取文件,字符串如下所示:

AAdοbe Dοcument Clοud

如何在Java中获得与Notepad++相同的编码?

您必须在文件读取器中设置编码

new FileReader(fileName, StandardCharsets.UTF_8)

您必须在此文件读取器中设置编码

new FileReader(fileName, StandardCharsets.UTF_8)

您必须使用与文件相同的编码读取java文件

如果您正在使用非标准编码,甚至尝试使用以下内容读取编码:

InputStreamReader r = new InputStreamReader(new FileInputStream(theFile));
r.getEncoding()
可能会输出错误的值

很少有库能够更好地处理编码识别:
它在获得正确编码方面也有一些漏洞,但我已经使用过了。
在使用它时,我发现大多数非标准编码都可以用UTF-16读取,比如:

new FileReader(fileName, StandardCharsets.UTF_16)

从一段时间以来,Java支持使用UTF-16编码。它在Java标准API中定义为
StandardCharsets.UTF_16
。该字符集包含许多特定于语言的字符和表情符号

您必须使用与文件相同的编码读取java文件

如果您正在使用非标准编码,甚至尝试使用以下内容读取编码:

InputStreamReader r = new InputStreamReader(new FileInputStream(theFile));
r.getEncoding()
可能会输出错误的值

很少有库能够更好地处理编码识别:
它在获得正确编码方面也有一些漏洞,但我已经使用过了。
在使用它时,我发现大多数非标准编码都可以用UTF-16读取,比如:

new FileReader(fileName, StandardCharsets.UTF_16)

从一段时间以来,Java支持使用UTF-16编码。它在Java标准API中定义为
StandardCharsets.UTF_16
。该字符集包含许多特定于语言的字符和表情符号

您的文件编码为UTF-8,
CE BF
字节是字符
ο
()的UTF-8编码

如果使用记事本++中的
编码
下拉菜单指定UTF-8,则应看到以下内容:

AAdοbe Dοcοud文件
你可能想用普通的拉丁字母o()来代替希腊字母

如果决定保留希腊文ο,则需要确保Java程序使用UTF-8读取文件,最好使用以下其中一种方法:

BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt")); // UTF-8 is the default

BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"), StandardCharsets.UTF_8);

如果您使用调试器查看文本,您应该看到它现在已被正确读取。如果打印文本,请确保您使用的控制台窗口可以处理UTF-8字符,否则即使读取正确,也可能打印错误。

您的文件编码为UTF-8,
CE BF
字节是字符的UTF-8编码
ο
()

如果使用记事本++中的
编码
下拉菜单指定UTF-8,则应看到以下内容:

AAdοbe Dοcοud文件
你可能想用普通的拉丁字母o()来代替希腊字母

如果决定保留希腊文ο,则需要确保Java程序使用UTF-8读取文件,最好使用以下其中一种方法:

BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt")); // UTF-8 is the default

BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"), StandardCharsets.UTF_8);

如果您使用调试器查看文本,您应该看到它现在已被正确读取。如果打印文本,请确保您使用的控制台窗口可以处理UTF-8字符,否则即使正确读取,也可能打印错误。

您如何在Java中读取文本?您如何在Java中读取文本?我尝试了此方法,但没有帮助,还有AAdÎÎbe DÎcÎDÎcÎDÎcÎDÎDÎcÎDÎDÎcÎDÎDÎcÎDÎDÎDÎcÎDÎDÎDÎDÎcÎD。