ファイルからデータをバイト ストリームとして読み取ろうとしているところですが、最適な処理方法がわからない 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 は実際にそれを行うためのメカニズムを提供していますか?
ありがとう