0

ドキュメントからテキストを取得しようとしたときに、TMやC(著作権)などの特殊文字が続く場合、テキストファイルに書き込んだ後、予期しない追加が行われます。例として、次のことを考えることができます。

持っていてApache™ Hadoop™!、それを使用してテキストに書き込もうとするとFileOutputStream、結果は私には意味がないようApacheâ Hadoopâになります。一般的に、テキスト内のそのような文字を検出し、それらをスキップして書き込む方法が必要です。解決策はありますか。âこれに?

4

3 に答える 3

0

私は最初に質問を読み間違えましたが、あなたがそれらをスキップしたいと思っていることに気づきませんでした。これは今のところここに残しておき、誰かがもっと良いものを投稿した場合は削除します。


文字を適切に処理するために、文字セットをISO-8859-1に明示的に設定できます。これを行うには、のようなものを使用する必要がありますOutputStreamWriter

final OutputStreamWriter writer;

writer = new OutputStreamWriter(new FileOutputStream(file),
                                Charset.forName("ISO-8859-1"));
writer.write(string);
writer.close();

これはそれらをスキップしませんが、それらを適切にエンコードする必要があります。

于 2012-05-09T09:04:56.073 に答える
0

その理由は、文字コーディングの問題です。文字列をファイルに書き込む前に、文字列文字をコーディングする必要があります。
次のように使用できます。

    Writer out = new OutputStreamWriter(new FileOutputStream(   
                        new File("D://helloWorld.txt")), "UTF8");
    String tm ="Apache™ Hadoop™";
    out.write(tm);
    out.close();
于 2012-05-09T09:19:04.243 に答える
0

印刷可能なASCII範囲だけが必要な場合は、新しい文字列を作成する文字ごとに文字列文字を繰り返し処理します。0x20からの範囲内にある場合にのみ、文字を含めます0x7E

final StringBuilder buff = new StringBuilder();
for (char c : string.toCharArray())
{
  if (c >= 0x20 && c <= 0x7E)
  {
    buff.append(c);
  }
}

final FileWriter w = new FileWriter(...);
w.write(buff.toString());
w.close();

キャリッジリターンと改行を保持したい場合は、とも考慮する必要があり0x0Aます0x0D

于 2012-05-09T10:23:25.740 に答える