2012-01-04 9 views
0

一連のstring.replaceAllsを使用して、ASCIIコード& HTMLエンコーディングのテキストファイル内のすべてのUTF-8特殊文字を交換しようとしています。途中で私は特に頑固なものを打った:\ uAC8B、UTF - 8 middot。string.replaceAll切断文字時間の50%

ここでは、文字、半分の時間を切り出すラインです:

string_out = string_out.replaceAll("•", "·"); 

は(「¬ïは」UTF-8&middotがどのようである;拡張ASCIIとして表示されます。この行につまずく前に、私は」。 dは "\ uAC8B"と他の多くのエンコーディングを成功させようとしました)。

この行はUTF-8 middotを切り捨て、置き換えず、半分の時間しかかかりません。残りの半分はキャラクターを逃し、それをそのまま残す。私が複数のコピーを作ったり、他の行を動かしたりしても、それはしません。

これはマルチスレッドの問題のように感じますが、私はマルチスレッドが進行中であることに気づいていません。他の.jspから実行されるインクルードされた.jspファイル内のreplaceAllのブロック。

この競合状態のような動作を引き起こす原因は何ですか?

答えて

4

AC8Bはドットではありません。中国語です。 00B7を意味しましたか?

Java文字列は、常にUTF-16 Unicodeです。 UTF-8はファイル内のUnicode文字を表現する方法であり、Java文字列がメモリに格納される方法ではありません。

入力の読み取りと出力ファイルの書き込みに使用されるエンコーディングに注意してください。これらはUTF-8である必要がありますが、ファイルの内容がJava文字列に読み込まれるとUTF- 16ビットUnicodeです。

私はUTF-8生のバイトをASCIIとして表現しようとせず、正しいUnicodeエスケープを使用していると思います。

+0

シングルスレッドコードのような競合状態になっていた理由を理解したことはありませんでしたが、正しいエンコーディングを固定してしまったのです。私がファイルから抜け出していたかわいそうを間違って解釈したと指摘したとき、私は戻ってきて、私が戻ってきたことについて何らかの前提を確認しました。ありがとう。 – baudot

+0

クール!私はそれが助けてうれしいです。 – theglauber

関連する問題