java - 修复字符串中的混合编码
问题描述
我有一个包含以下字符串的文件:
AAdοbe Dοcument Clοud
如果在 Notepad++ 中查看。在十六进制视图中,字符串如下所示:
如果我使用 Java 读取文件,则字符串如下所示:
AAdοbe Dοcument Clοud
如何在 Java 中获得与 Notepad++ 相同的编码?
解决方案
您的文件被编码为 UTF-8,CE BF
字节是字符的 UTF-8 编码ο
('GREEK SMALL LETTER OMICRON' (U+03BF))。
如果您使用Encoding
Notepad++ 中的下拉菜单指定 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 字符,否则即使读取正确,它也可能打印错误。
推荐阅读
- database - 在 Oracle SQL developer 18.x 中配置 GIT
- rust - 如何编写只能与某种类型的迭代器一起使用的迭代器扩展?
- python-3.x - Python3 - 无法根据来自对象检测过程的输入正确启动输出设备
- java - 仅当在 Scala 中使用不相关的对象时才同步块
- math - 在 OBB(定向边界框)上查找特定点
- sql - SQL 更新列
- sql-server - 提高查询性能
- python - 我正在尝试重新调整与 MinMaxscaler 方法略有不同的数据框中的数字列
- python - Fail to load a subpart of "open-images-v6" with Fiftyone
- java - 数组列表未成功打印