我正在从具有以下属性的文本文件中读取数据:
编码:ANSI
文件类型:电脑
现在,该文件包含许多特殊字符,例如度数符号(°)等。我正在使用以下代码读取该文件:
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 时,该行按文件中的原样读取,而不会弄乱特殊字符。
我的问题是,数据在什么时候会变得混乱?当将数据存储在文件中时还是从文件中读取数据时?在记事本中打开文件会正确显示所有特殊字符。这是怎么发生的?
十六进制转储输出:
-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 ]
“ANSI”不是一个特定的编码 - 它是一个整体收藏的编码。您需要使用right读取文件时的编码。例如,您完全有可能正在使用Windows-1252 http://en.wikipedia.org/wiki/Windows-1252编码,这意味着你may想尝试传入“Cp1252”作为编码名称。
事实上,您传递的是“UTF-8”isn't通常称为 ANSI 的编码之一。您需要找出文件使用的确切编码,然后在InputStreamReader
范围。
我的问题是,数据在什么时候会变得混乱?当将数据存储在文件中时还是从文件中读取数据时?
假设编码能够表示您感兴趣的所有字符,只有当您读取文件时才会如此。基本上,您试图将其视为采用一种编码来读取,而实际上它采用的是另一种编码。记事本要么正在执行某种启发式编码检测,要么恰好使用正确的默认值对于这种特殊情况.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)