En Java, tengo una cadena y quiero codificarla como una matriz de bytes (en UTF8, o alguna otra codificación). Alternativamente, tengo una matriz de bytes (en alguna codificación conocida) y quiero convertirla en una cadena de Java. ¿Cómo hago estas conversiones?
java
string
encoding
character-encoding
mcherm
fuente
fuente
Aquí hay una solución que evita realizar la búsqueda de Charset para cada conversión:
fuente
StandardCharsets.UTF_8
de manera constante para acceder al juego de caracteres UTF-8.fuente
Puede convertir directamente a través del constructor String (byte [], String) y el método getBytes (String). Java expone los juegos de caracteres disponibles a través de la clase Charset . La documentación de JDK enumera codificaciones compatibles .
El 90% del tiempo, tales conversiones se realizan en transmisiones, por lo que usaría las clases Reader / Writer . No descodificaría incrementalmente utilizando los métodos de cadena en secuencias de bytes arbitrarias; se dejaría abierto a errores que involucren caracteres multibyte.
fuente
UTF-8
, ¿cuál es la preocupación con respecto a los caracteres multibytes?Mi implementación de tomcat7 está aceptando cadenas como ISO-8859-1; a pesar del tipo de contenido de la solicitud HTTP. La siguiente solución funcionó para mí al intentar interpretar correctamente caracteres como 'é'.
Al intentar interpretar la cadena como US-ASCII, la información del byte no se interpretó correctamente.
fuente
StandardCharSets.UTF_8
yStandardCharSets.ISO_8859_1
.Como alternativa, se pueden usar StringUtils de Apache Commons.
o
Si tiene un juego de caracteres no estándar, puede usar getBytesUnchecked () o newString () en consecuencia.
fuente
Para decodificar una serie de bytes en un mensaje de cadena normal, finalmente lo hice funcionar con la codificación UTF-8 con este código:
fuente
Si está utilizando ASCII de 7 bits o ISO-8859-1 (un formato increíblemente común), entonces no tiene que crear un nuevo java.lang.String . Es mucho más eficiente simplemente convertir el byte en char:
Ejemplo de trabajo completo:
Si está no utiliza caracteres extendidos como un, AE, A, C, I, E y puede estar seguro de que los únicos valores transmitidos son de los primeros 128 caracteres Unicode, a continuación, este código también trabajo para UTF-8 y ASCII extendido (como cp-1252).
fuente
No puedo comentar pero no quiero comenzar un nuevo hilo. Pero esto no está funcionando. Un simple viaje de ida y vuelta:
Necesitaría b [] la misma matriz antes y después de la codificación que no es (esto se refiere a la primera respuesta).
fuente
fuente
fuente
fuente
terriblemente tarde, pero acabo de encontrar este problema y esta es mi solución:
fuente