不同于非android java的android java字符

不同于非android java的android java字符,java,android,string,unicode,utf-8,Java,Android,String,Unicode,Utf 8,我有一个RandomAccessFile对象,它从文件中读取字节并将它们存储到字节数组中。他们应该组成一个希伯来字母串。 如果我在桌面上用JAVA调试它们,那么我会得到4个十六进制字节,例如: data[0]=E7 data[1]=FA data[2]=E5 data[3]=EC (因此,每个字节长度为1字节,这是有意义的) 当我从它们构造字符串str时,我得到: str[0]=\u05D7 str[1]=\u05EA str[2]=\u05D5 str[3]=\u05DC 哪一个是正确的希

我有一个RandomAccessFile对象,它从文件中读取字节并将它们存储到字节数组中。他们应该组成一个希伯来字母串。 如果我在桌面上用JAVA调试它们,那么我会得到4个十六进制字节,例如:

data[0]=E7
data[1]=FA
data[2]=E5
data[3]=EC
(因此,每个字节长度为1字节,这是有意义的)

当我从它们构造字符串str时,我得到:

str[0]=\u05D7
str[1]=\u05EA
str[2]=\u05D5
str[3]=\u05DC
哪一个是正确的希伯来字母,字符串打印出来就可以了。它们每个有2字节长吗

当我在Android设备上进行相同的调试时,我得到了相同的“数据”字节数组,但“str”字符串是4个相同的字节,读起来是4个问号

我的问题是:java怎么能接受1个字节并“知道”它是希伯来语,而我怎么能在Android中同样做到这一点

谢谢

代码:


至于你的问题:不,Java不能只接受1个字节就知道它是希伯来语或任何其他编码


虽然可以通过查看文件中的多个/所有字节以及查看字节频率来猜测编码(我相信微软是通过IE来猜的),但显然这不能在单个字节上工作。

你的代码是?你有没有检查过javadoc中使用的字节到字符串的转换方法,因为我很确定上面都有描述。你的桌面的语言环境是什么?是否桌面JVM的默认编码可以处理希伯来语,但Android JVM的默认编码类似于
ISO-8859-1
?是的,该代码使用默认编码,所以我几乎可以肯定,默认编码的差异是造成您所看到的差异的原因。我添加了nessecary代码以便于理解。我试着用新字符串(b定义,“Cp1255”)构建字符串,它成功了。但是我想写一些适合每种语言的东西。可能吗?显然,确定语言需要不止一个字节,但当我调试它时,我想知道需要什么。最简单的方法是知道要打开的文件的编码。请始终使用相同的编码,或者将文件编码关联存储在某个位置,或者在打开文件时要求用户指定编码。它不“知道”编码是什么。巧合的是,该文件是使用与桌面默认编码相同的编码创建的。(当然这并不是巧合——我猜你在桌面上创建了文件,并且也使用了默认的编码来创建。所以,当然,这与读入程序所期望的编码是一样的:)嗯。。。某种程度上。实际上,这是一个有争议的应用程序,我没有创建数据文件,但我先尝试了希伯来语,因为编码部分总是很难掌握,我这么说。。。
iDefLength=4;
RandomAccessFile R = new RandomAccessFile(file, "r");       
R.read(bDefinition, 0, iDefLength);
this.sDef = new String(bDefinition);