Java Android读取文件编码问题

Java Android读取文件编码问题,java,android,encoding,Java,Android,Encoding,我试图从SD卡读取一个文件,我被告知它是unicode格式的。但是,当我尝试读取该文件时,会得到以下结果: 这是我用来读取文件的代码: InputStreamReader fw = new InputStreamReader(new FileInputStream(root.getAbsolutePath()+"/Drive/sdk/cmd.62.out"), "UTF-8"); char[] buf = new char[255]; fw.read(buf); String rea

我试图从SD卡读取一个文件,我被告知它是unicode格式的。但是,当我尝试读取该文件时,会得到以下结果:

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

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();
如果我将输出写入一个文件,这就是我在十六进制编辑器中打开它时得到的结果:

关于我需要做什么才能正确读取文件,有什么想法吗?

文件是否有正确的格式?那样的话,看看

编辑(来自评论):在我看来,这看起来像是little endian UTF-16。请尝试使用字符集“UTF-16LE”。

该文件是否有一个字符集?那样的话,看看


编辑(来自评论):在我看来,这看起来像是little endian UTF-16。尝试使用字符集“UTF-16LE”。

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


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

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


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

不确定,但我尝试应用BOM删除代码,这似乎使情况变得更糟!我想最简单的解决办法是去掉所有那些奇怪的A字符——不幸的是,我不知道unicode字符怎么做……去掉这些字符并不能解决问题。你确定这是UTF-8文件吗?你能在十六进制编辑器中查看该文件并发布屏幕截图或前几个字节的十六进制代码吗?我只知道它是unicode。我试过UTF-16,但它完全不可读,它只是由许多狡猾的字符组成。根据要求,我已经输出了每个字符的十六进制代码(见原始帖子)。似乎每个字符之间都有一个0。单个
0
在字符之间没有多大意义。它实际上是一个0字节,应该是
00
。您的输出的问题是,它已经被(可能是错误的)Java代码处理过了,所以在“独立的”十六进制编辑器中查看它会更好…谢谢。在我看来,这就像是小endian UTF-16。尝试字符集“UTF-16LE”。不确定,但我尝试应用BOM删除代码,它似乎使情况变得更糟!我想最简单的解决办法是去掉所有那些奇怪的A字符——不幸的是,我不知道unicode字符怎么做……去掉这些字符并不能解决问题。你确定这是UTF-8文件吗?你能在十六进制编辑器中查看该文件并发布屏幕截图或前几个字节的十六进制代码吗?我只知道它是unicode。我试过UTF-16,但它完全不可读,它只是由许多狡猾的字符组成。根据要求,我已经输出了每个字符的十六进制代码(见原始帖子)。似乎每个字符之间都有一个0。单个
0
在字符之间没有多大意义。它实际上是一个0字节,应该是
00
。您的输出的问题是,它已经被(可能是错误的)Java代码处理过了,所以在“独立的”十六进制编辑器中查看它会更好…谢谢。在我看来,这就像是小endian UTF-16。试试字符集“UTF-16LE”。有趣的提示,谢谢。我将尝试使用不同的编码类型创建不同的文件。。我想这是学习不同有趣技巧的最简单方法,谢谢。我将尝试使用不同的编码类型创建不同的文件。。我想这是了解差异的最简单方法