内存编码

文本在内存中的编码(2)——乱码探源(5)

流过昼夜 提交于 2019-11-28 14:39:23
在前面我们探讨了String是什么的问题,现在来看String从哪来的问题。 String从哪里来? 所谓从哪里来也可以看作是String的构造问题,因此我们会从String的构造函数说起。 String的构造函数 在前面我们知道String的内部就是char[],因此它可以根据一组char[]来构建,String中有这样的构造函数: public String(char value[]) {} 那么char[]又从何而来呢?char的底层是byte,String从根本上讲还是字节序列,而一个文本文件从根本上讲它也是字节序列,那是不是直接把一个文本文件按字节读取上来就成了一个String呢? 答案是否定的。因为我们知道String不但是byte[],而且它是一个有特定编码的byte[],具体为UTF-16。 而一个文本文件的字节序列有它自己特定的编码,当然它也可能是UTF-16,但更可能是如UTF-8或者是GBK之类的,所以通常要涉及编码间的一个转换过程。我们来看下通过字节序列来构造String的几种方式: public String(byte bytes[]) {} public String(byte bytes[], String charsetName) throws UnsupportedEncodingException {} public String(byte