我刚刚发现Android可以正确读取使用Windows ANSI(或所谓的多字节编码)编码的文件,并将其转换为Java Unicode字符串.但是在读取Unicode文件时失败了.似乎Android正在以逐字节的方式读取它.文件中的Unicode字符串"ABC"将被读入长度为6的Java字符串,字符为0x41,0x00,0x42,0x00,0x43,0x00.
BufferedReader in = new BufferedReader(new FileReader(pathname));
String str = in.readLine();
Run Code Online (Sandbox Code Playgroud)
请问有没有办法在Android上正确读取Windows Unicode文件?谢谢.
将帖子
实验:我在两个Windows文本文件中保存了两个汉字"难哪":
ANSI.txt -- C3 F8 AD FE
UNICODE.txt -- FF FE E3 96 EA 54
Run Code Online (Sandbox Code Playgroud)
然后我将这些文件放到Emulator的SD卡中,我使用以下程序读取它们:(注意,模拟器的语言环境已经设置为zh_TW).
BufferedReader in = new BufferedReader(new FileReader("/sdcard/ANSI.txt"));
String szLine = in.readLine();
int n = szLine.length(), j, i;
in.close();
for (i = 0; i < n; i++)
j = szLine.charAt(i);
Run Code Online (Sandbox Code Playgroud)
这是我在模拟器上看到的:
ANSI.txt -- FFFD FFFD FFFD
UNICODE.txt -- FFFD FFFD FFFD FFFD 0084
Run Code Online (Sandbox Code Playgroud)
显然Android(或Java)无法正确解码中文字符.那么,我该怎么做?先感谢您.
FileReader显然假设编码与ASCII兼容.(可能期望UTF-8或任何旧的ASCII扩展).
此外,它不是"Unicode文件" - 它是"UTF-16编码文件".
您将不得不使用a StreamReader并自己指定编码:
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(pathname), "UTF-16LE"));
Run Code Online (Sandbox Code Playgroud)
您还应该阅读那篇文章 - 在我看来,您对字符集和编码有很多误解.
| 归档时间: |
|
| 查看次数: |
5448 次 |
| 最近记录: |