Frage

unterstützen einige Zeichen nicht durch bestimmtes charset, so unten Test nicht bestehen. Ich möchte HTML-Entität zu kodieren verwenden, um nur nicht unterstützt Charakter. Wie in 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);
}
War es hilfreich?

Lösung

Versuchen Sie StringEscapeUtils von Apache commons.

Andere Tipps

Ich bin nicht positiv Ich verstehe die Frage, aber so etwas wie diese helfen könnte:

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();

Dieser Code ist nicht robust, da es Zeichen Griff nicht über die Basic Multilingual Plane. Aber iterieren Codepunkte in den String, und mit Hilfe der canEncode(CharSequence) Methode der CharsetEncoder, sollten Sie in der Lage sein, alle Zeichen zu behandeln.

Just Verwendung utf-8, und auf diese Weise gibt es keinen Grund Einheiten zu verwenden. Wenn es ein Argument ist, dass einige Kunden gb2312 brauchen, weil sie Unicode nicht verstehen, dann Entitäten sind nicht viel entweder, weil die numerischen Entitäten darstellen Unicode-Codepunkte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top