我正在读取一个具有以下属性的文本文件:
编码:ANSI
文件类型:PC
现在,该文件包含许多特殊字符,如度符号(º)等。我正在使用以下代码读取此文件:
File file = new File("C:\\X\\Y\\SpecialCharacter.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
如果文件编码为ANSI,则上述代码无法正确读取特殊字符,例如文件中的行:
“将热量降低并煨,直到产品达到165ºF的内部温度”,
reader.readLine()
输出:“将热量降低并煨,直到产品达到165�F的内部温度”。
当我将文件编码更改为UTF-8时,该行就会像文件中一样读取,而不会弄乱特殊字符。
我的问题是,在什么时候数据会出现问题?在将数据存储在文件中还是从文件中读取时?在记事本中打开文件可以正确显示所有特殊字符。这是如何发生的?
Hexdump 输出:
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
00000000- 4C 6F 77 65 72 20 68 65 61 74 20 61 6E 64 20 73 [Lower heat and s]
00000001- 69 6D 6D 65 72 20 75 6E 74 69 6C 20 70 72 6F 64 [immer until prod]
00000002- 75 63 74 20 72 65 61 63 68 65 73 20 69 6E 74 65 [uct reaches inte]
00000003- 72 6E 61 6C 20 74 65 6D 70 65 72 61 74 75 72 65 [rnal temperature]
00000004- 20 6F 66 20 31 36 35 BA 46 [ of 165.F ]
hexdump
,这样我们就可以确定 'º' 如何被编码了。 - Mike Samuel