Domanda

Alcuni carattere non supporta da alcuni set di caratteri, quindi al di sotto di prova fallire. Vorrei utilizzare entità html per codificare solo quelli di carattere non supportato. Come, 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);
}
È stato utile?

Soluzione

Prova a usare StringEscapeUtils da apache Commons.

Altri suggerimenti

Io non sono positivi aver capito la domanda, ma qualcosa di simile Questo potrebbe aiutare:

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

Questo codice non è robusto, perché non gestisce i caratteri oltre il Basic Multilingual Plane. Ma l'iterazione di punti di codice nel String, e utilizzando il metodo canEncode(CharSequence) del CharsetEncoder, si dovrebbe essere in grado di gestire qualsiasi carattere.

Basta usare utf-8, e in questo modo non v'è alcun motivo per utilizzare le entità. Se c'è un argomento che alcuni clienti hanno bisogno GB2312 perché non capiscono Unicode, quindi le entità non sono molto uso sia, perché le entità numeriche rappresentano punti di codice Unicode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top