0

Java Unicode とエンコーディングの問題を解決できませんでした。問題は、"Steve O#8217Conord and Mirco Savas" や ..."Rusell O’Connell" のような 5,000 以上の文字列があることです。ここで、"#8217" と "’" はアポストロフィに置き換える必要があります。

しかし、このコードにはさまざまなバリエーションがあり、apache.common.lang.StringUtilsApache ライブラリは問題の解決に役立っていません。最後に。5,000 以上の文字列があるため、どこでも入力することはできません。したがって、正規表現などを使用して文字列内のこれらのシーケンスを見つけてアポストロフィに置き換える方法があれば、喜んで聞いてくれます:)

さらに、「O」のような記号がいくつかあり、UTF8 で読み取る必要があるため、大きな問題になります。(\u8127) などの文字を意味します。何か提案はありますか?

4

1 に答える 1

0

次のようなことを試してください:

import java.io.FileOutputStream;
import java.io.PrintWriter;
import org.apache.commons.lang3.StringEscapeUtils;

String[] myStringPool = {"Steve O#8217Conord and Mirco Savas","Rusell O&#146Connell"};
PrintWriter pw = new PrintWriter("utf-8.txt", "UTF-8");
for(String string : myStringPool) {
    pw.println(StringEscapeUtils.unescapeXml(string.replaceAll("&?#(\\d+);?", "&#$1;")));
}
pw.close();

これらの文字列が既にアクセス可能であると仮定するとstring.replaceAll("&?#(\\d+);?", "&#$1;")、文字列内の XML エンティティがエスケープ解除されるようにクリーンアップされorg.apache.commons.lang3.StringEscapeUtils(Get it here )、文字列は最終的に UTF-8 形式でファイルに書き込まれます。

Java は、ファイルを UTF-8 として自動的に読み書きするように構成できることに注意してください。Java は、システムに適したエンコーディングを自動的に使用する必要があります。自分が何をしているのか本当にわかっていない限り、ファイルを特定のエンコーディングとして明示的に書き込むことは一般的に悪い考えです。

于 2012-11-20T22:23:04.247 に答える