byte []到String转换并再次使用UTF-8编码返回byte []不会给出相同的字节数组

时间:2016-01-26 21:39:00

标签: java

为了更多地了解Java中的字节,字符串和字符串,我采用了一个示例byte []并转换为String,然后将字符串转换为byte []。但是我意识到原始byte []和new byte []不相同。为什么?任何帮助。

import java.io.UnsupportedEncodingException;

public class HelloWorld{

     public static void main(String []args) throws UnsupportedEncodingException{

        byte [] originalStringBytes = {39, -94, 17, -18, 43, 32, 50, -70, 31, -125, -46, 10, -23, 32, -112, 63};
        //Convert into string 
        String convertedString = new String (originalStringBytes, "UTF-8");
        //Now again get the bytes back from string 
        byte [] afterStringConversionBytes = convertedString.getBytes("UTF-8");
        //compare two byte array, both are not same
        if(originalStringBytes.length == afterStringConversionBytes.length) {
            System.out.println("SAME");
        } else {
            System.out.println("DIFFERENT");
        }

     }
}

它为我打印了“不同”。

1 个答案:

答案 0 :(得分:2)

字节序列必须遵循严格的规则才能成为有效的utf-8编码文本。您在数组中拥有的内容不遵循这些规则,并且不会在不丢失信息的情况下转换为字符串。

例如https://en.wikipedia.org/wiki/UTF-8

中解释了这些规则