0

ファイルからバイトを読み取り、それらをバイト配列に格納するこのRandomAccessFileオブジェクトがあります。ヘブライ文字列を作成する必要があります。デスクトップのJAVAでデバッグすると、16進数で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で同じようにそれを行うにはどうすればよいのかということです。

ありがとう

コード:

iDefLength=4;
RandomAccessFile R = new RandomAccessFile(file, "r");       
R.read(bDefinition, 0, iDefLength);
this.sDef = new String(bDefinition);
4

1 に答える 1

0

あなたの質問に関して:いいえ、Javaは1バイトを取り、それがヘブライ語または他のエンコーディングであることを知ることはできません。

ファイル内の多くの/すべてのバイトを調べたり、バイト頻度を調べてエンコーディングを推測したりすることでエンコーディングを推測することは可能ですが(MicrosoftはIEでこれを行っていると思います)、明らかに1バイトでは機能しません。 。

于 2012-05-20T12:35:00.650 に答える