4

ファイルからデータをバイト ストリームとして読み取ろうとしているところですが、最適な処理方法がわからない Unicode 文字列に遭遇しました。

各文字は 2 バイトを使用しており、最初のバイトのみが実際のデータを含んでいるように見えるため、たとえば、文字列 'trust' は次のようにファイルに保存されます。

0x74 0x00(t) 0x72 0x00(r) ...and so on

通常、正規表現を使用してゼロを何も置き換えないため、空白を削除します。ただし、ファイル内の単語間のスペースは を使用して実装されている0x00 0x00ため、単純な String 'replaceAll' を実行しようとすると、少し混乱します。

「ISO-8859-1」や「UTF-8/16」などの文字列エンコーディング セットをいじってみましたが、毎回空白になってしまいます。

2 つのゼロの 16 進値を削除する単純な正規表現を作成しました。これは次のとおりです。

new String(bytes).replaceAll("[\\00]{2,},"");

しかし、これは明らかに二重のゼロに対してのみ機能します。単一のゼロを何も置き換えず、二重のゼロを実際の ASCII/Unicode スペース文字に置き換えたいと思います。

Java 文字列形式の設定の 1 つがこの種の処理を行っていると断言できましたが、間違っている可能性があります。では、ゼロを削除する正規表現の作成に取り組む必要がありますか、それとも Java は実際にそれを行うためのメカニズムを提供していますか?

ありがとう

4

2 に答える 2

7
于 2013-02-07T11:27:44.697 に答える
5

ファイルからデータをバイト ストリームとして読み取ろうとしているところですが、最適な処理方法がわからない Unicode 文字列に遭遇しました。

適切な文字セットを使用してそれらを文字列に変換します。この場合は UTF-16LE (リトルエンディアン UTF-16、最初に下位バイト、次に上位バイトが続きます)

String str = new String(bytes, "UTF-16LE");
于 2013-02-07T11:32:19.990 に答える