繁体   English   中英

在Android上读取Windows Unicode文件

[英]Reading Windows Unicode files on 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();

请问,有没有一种方法可以在Android上正确读取Windows Unicode文件? 谢谢。

[编辑]

实验:我在两个Windows文本文件中保存了两个汉字“难哪”:

ANSI.txt -- C3 F8 AD FE
UNICODE.txt -- FF FE E3 96 EA 54

然后,将这些文件放入Emulator的SD卡中,并使用以下程序读取它们:(注意,Emulator的语言环境已设置为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);

这是我在模拟器上看到的:

ANSI.txt -- FFFD FFFD FFFD
UNICODE.txt -- FFFD FFFD FFFD FFFD 0084

显然,Android(或Java)无法正确解码汉字。 那么,我该怎么做呢? 先感谢您。

FileReader显然假定编码将是ASCII兼容的。 (可以使用UTF-8或任何较旧的ASCII扩展名)。

另外,它不是“ Unicode文件”,而是“ UTF-16编码文件”。

您将必须使用StreamReader并自己指定编码:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(pathname), "UTF-16LE"));

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

您可以尝试以下代码。
通常在中文单词内的Window基Ascii文件
在Android系统下可能不是正确的过程。

通常,默认情况下在流Process中使用UTF8格式。

一旦您将中文单词中的Window base Ascii文件放置到Android系统中。
正常的流程无法正确识别中文部分。

以下代码,可以从中文单词内的Window Base Acsii文本文件中更正解析器字符串
放在Android System SD或Asset文件夹中。

使用InputStreamReader Ojbect的“ BIG5”格式解码器非常简单。

我已经验证了。 运作良好。 试试吧 !!
仅供参考。 KNC。

String pathname="AAA.txt";
BufferedReader inBR;
inBR = new BufferedReader(new InputStreamReader(new FileInputStream(pathname), "BIG5"));
String sData="";

while ((sData  = inBR.readLine()) != null) {
    System.out.println(sData);
}

文件中的Unicode字符串“ ABC”将被读入长度为6的Java字符串,并且字符为0x41、0x00、0x42、0x00、0x43、0x00。

长度如何? 您所描述的内容对于Java String是绝对正确的。 Java字符串为UTF-16(即Unicode)。 这意味着ABC将完全按照您的描述存储在Java字符串中( 0x41, 0x00, 0x42, 0x00, 0x43, 0x00 )。

但是,由int String.length()返回的int String.length() '即使是6个字节长也将为3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM