java example Converti stringa Unicode UTF-8 in stringa ASCII con escape Unicode




php get string encoding (2)

Devo convertire una stringa unicode in una stringa che abbia caratteri non ASCII codificati in Unicode. Ad esempio, la stringa "漢字 Max" deve essere presentata come "\ u6F22 \ u5B57 Max".

Quello che ho provato:

  1. Combinazioni differenziali di

    new String (sourceString.getBytes (encoding1), encoding2)

  2. Apache StringEscapeUtils che sfugge anche caratteri ascii come virgolette

    StringEscapeUtils.escapeJava (fonte)

C'è un modo semplice per codificare tale stringa? Idealmente, solo Java 6 SE o Apache Commons dovrebbero essere utilizzati per ottenere il risultato desiderato.


Answer #1

Questo è il tipo di codice semplice che Jon Skeet aveva in mente nel suo commento:

final String in = "šđčćasdf";
final StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length(); i++) {
  final char ch = in.charAt(i);
  if (ch <= 127) out.append(ch);
  else out.append("\\u").append(String.format("%04x", (int)ch));
}
System.out.println(out.toString());

Come ha detto Jon, le coppie surrogate saranno rappresentate come una coppia di fughe.


Answer #2

Soluzione basata su escaper Guava:

Questo esegue il escape di qualsiasi carattere non ASCII in sequenze di escape Unicode.

import static java.lang.String.format;    
import com.google.common.escape.CharEscaper;

public class NonAsciiUnicodeEscaper extends CharEscaper
{
    @Override
    protected char[] escape(final char c)
    {
        if (c >= 32 && c <= 127) { return new char[]{c}; }
        else { return format("\\u%04x", (int) c).toCharArray(); }
    }
}




ascii