在Android上读取Windows Unicode文件

wwy*_*wyt 0 unicode android

我刚刚发现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)无法正确解码中文字符.那么,我该怎么做?先感谢您.

Jea*_*nal 9

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)

您还应该阅读那篇文章 - 在我看来,您对字符集和编码有很多误解.