Conversión y trampas de datos de bytes entre conjuntos de codificación (resumen detallado)

Bienvenidos al blog de Shi Tianzun

Malentendido: cuando la matriz de bytes no está segura de qué conjunto de códigos es, use cualquier conjunto de códigos para convertir el byte en una cadena de cadena y luego use el mismo conjunto de códigos para convertir la cadena de cadena en una matriz de bytes. Las matrices de bytes antes y después son las mismas.

¡Esta comprensión es incorrecta! ! Es probable que la matriz de bytes contenga chino. Pero no sabemos de antemano si hay chino, lo que hace que cambien las matrices de bytes delantera y trasera.

Hombre de pocas palabras. Cargue el código, ejecútelo y vea el resultado.

    public static void main(String[] args) throws UnsupportedEncodingException {
    
    
        
        String str = "123木头人";
        
        /**生成相应编码集的byte数组,假设编码集并不知情*/
        byte[] bytes = str.getBytes("UTF-8");
        //byte[] bytes = str.getBytes("GBK");
        //byte[] bytes = str.getBytes("GB2312");
        //byte[] bytes = str.getBytes("ISO8859-1");
        //byte[] bytes = str.getBytes("GB18030");
        
        /**打印转换前byte数组*/
        System.out.println(Arrays.toString(bytes));
        
        /**编码集转换*/
        String newstr = new String(bytes,"GBK");
        byte[] bytes2 = newstr.getBytes("GBK");
        
        /**打印转换后byte数组*/
        System.out.println(Arrays.toString(bytes2));
    }

Resultado de ejecución
[49, 50, 51, -26, -100, -88, -27, -92, -76, -28, -70, -70]
[49, 50, 51, -26, -100, - 88, -27, -92, -76, -28, -70, 63]

Puede verse que después de la conversión del conjunto de codificación, el byte ya no es el dato original.

Según la situación anterior. Hicimos una prueba completa para los conjuntos de códigos más utilizados (UTF-8, GBK, GB2312, ISO8859-1, GB18030). Los resultados de la prueba se muestran a continuación.

El resultado completo de la conversión del conjunto de códigos
El rojo significa que los bytes frontal y posterior son inconsistentes. Verde significa que no hay cambios en el byte antes y después.

para resumir

1. Convierta los conjuntos de códigos de las series UTF-8 y GB (GBK, GB2312, GB18030) y tenga cuidado cuando haya chino.
2. La matriz de bytes no está segura de qué conjunto de códigos es. La conversión de codificación ISO8859-1 está completamente bien.
3. Cuando la matriz de bytes está codificada en ISO8859-1. Todos los conjuntos de códigos anteriores se pueden convertir. La matriz no cambiará.

Supongo que te gusta

Origin blog.csdn.net/jiazhiwei5201314/article/details/106402603
Recomendado
Clasificación