java - ejemplos - utf-8 ñ
Convierte una cadena Unicode UTF-8 en una cadena escapada ASCII Unicode (2)
Necesito convertir cadena unicode a cadena que tenga caracteres no ASCII codificados en Unicode. Por ejemplo, la cadena "漢字 Max" se debe presentar como "/ u6F22 / u5B57 Max".
Lo que he intentado:
Diferentes combinaciones de
nueva cadena (sourceString.getBytes (encoding1), encoding2)
Apache StringEscapeUtils que escapa también ascii chars como comillas dobles
StringEscapeUtils.escapeJava (fuente)
¿Hay una manera fácil de codificar tal cadena? Idealmente, solo Java 6 SE o Apache Commons deberían usarse para lograr el resultado deseado.
Este es el tipo de código simple que Jon Skeet tenía en mente en su comentario:
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());
Como dijo Jon, los pares sustituidos se representarán como un par de escapes.
Solución basada en Escava de Guava:
Esto escapa de los caracteres no ASCII en las secuencias de 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(); }
}
}