2011-03-28 86 views
0

我试图从SD卡上读取文件,并且我被告知它是unicode格式。但是,当我尝试阅读我得到以下文件:Android读取文件的编码问题

Encoded file

这是我用来读取文件的代码:

InputStreamReader fw = new InputStreamReader(new FileInputStream(root.getAbsolutePath()+"/Drive/sdk/cmd.62.out"), "UTF-8"); 
char[] buf = new char[255];  
fw.read(buf); 
String readString = new String(buf); 
Log.d("courierread",readString);  
fw.close(); 

如果我写的输出到文件这是当我用十六进制编辑器打开它时得到的结果: Hex info

有关我需要如何正确读取文件的想法?

回答

1

该文件是否有byte-order mark?在这种情况下看Reading UTF-8 - BOM marker

编辑(从评论):这看起来像小尾数UTF-16给我。试试字符集“UTF-16LE”。

+0

不确定,但我尝试应用BOM清除代码,它似乎使情况变得更糟!我想最简单的解决方案是去掉所有那些怪异的A字符 - 不幸的是我不知道unicode字符是这样做的。 – RichW 2011-03-28 10:55:17

+0

删除这些字符不会解决问题。你确定它是一个UTF-8文件吗?你可以在十六进制编辑器中查看文件并发布一个截屏或前几个字节的十六进制代码吗? – RoToRa 2011-03-28 11:04:00

+0

我只知道它是unicode。我试过UTF-16,它完全不可读,它只是由许多狡猾的角色组成。根据要求,我输出了每个字符的十六进制代码(请参阅原始文章)。看起来,每个字符之间有一个0 .. – RichW 2011-03-28 11:17:47

1

您在十六进制编辑器中显示的文件是而不是UTF-8编码的,它看起来更像是UTF-16。这意味着您必须在您的代码中指定UTF-16作为编码(可能是UTF-16LE变体)。

如果它是UTF-8编码的,那么它将表示所有可用ASCII表示的字符,只用一个字节。

+0

有趣的提示,谢谢你。我会尝试使用不同类型的编码创建不同的文件。我想这是了解差异的最简单方法 – RichW 2011-03-28 12:37:14