0

一部の文字は特定の文字セットでサポートされていないため、以下のテストは失敗します。サポートされていない文字のみをエンコードするためにhtmlエンティティを使用したいと思います。どのように、Javaで?

public void testWriter() throws IOException{
    String c = "\u00A9";
    String encoding = "gb2312";
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    Writer writer  = new BufferedWriter(new OutputStreamWriter(outStream, encoding));
    writer.write(c);
    writer.close();
    String result = new String(outStream.toByteArray(), encoding);
    assertEquals(c, result);
}
4

3 に答える 3

4

私はその質問を理解しているとは思いませんが、次のようなことが役立つかもしれません。

import java.nio.charset.CharsetEncoder;

...

  StringBuilder buf = new StringBuilder(c.length());
  CharsetEncoder enc = Charset.forName("gb2312");
  for (int idx = 0; idx < c.length(); ++idx) {
    char ch = c.charAt(idx);
    if (enc.canEncode(ch))
      buf.append(ch);
    else {
      buf.append("&#");
      buf.append((int) ch);
      buf.append(';');
    }
  }
  String result = buf.toString();

このコードは、基本多言語面を超える文字を処理しないため、堅牢ではありません。ただし、のコードポイントを繰り返し処理し、のメソッドをString使用すると、任意の文字を処理できるはずです。canEncode(CharSequence)CharsetEncoder

于 2009-11-19T04:37:44.133 に答える
0

ApacheCommonsのStringEscapeUtilsを使用してみてください。

于 2009-11-19T03:54:43.197 に答える
0

utf-8を使用するだけで、エンティティを使用する理由はありません。一部のクライアントがUnicodeを理解していないためにgb2312が必要であるという議論がある場合、数値エンティティはUnicodeコードポイントを表すため、エンティティもあまり使用されません。

于 2009-11-19T07:20:11.770 に答える