首页 > 解决方案 > 修复字符串中的混合编码

问题描述

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

AAdοbe Dοcument Clοud

如果在 Notepad++ 中查看。在十六进制视图中,字符串如下所示:

在此处输入图像描述

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

AAdοbe Dοcument Clοud

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

标签: javacharacter-encoding

解决方案


您的文件被编码为 UTF-8,CE BF字节是字符的 UTF-8 编码ο'GREEK SMALL LETTER OMICRON' (U+03BF))。

如果您使用EncodingNotepad++ 中的下拉菜单指定 UTF-8,您应该看到的内容为:

AAdοbe Dοcument Clοud

您可能希望将那些希腊语 ο 替换为常规拉丁 o('LATIN SMALL LETTER O' (U+006F))。

如果您决定保留希腊语 ο,则需要确保您的 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 字符,否则即使读取正确,它也可能打印错误。


推荐阅读