https://www.cnblogs.com/louiswong/p/6062417.html
https://www.cnblogs.com/fnlingnzb-learner/p/7272348.html
https://blog.csdn.net/chen404897439/article/details/102295833
是否内存中string和char都是utf-16,char 2字节,string中特殊的用两个char表示,而外编码无char概念,只有字节,以utf-8为例,一个字符可以是一个字节到6个字节
不用管string占几个字节,只要知道char占2个字节,内码中他们都是用utf-16编码,超出2个字节的,char无法表示,而从string输出的要用到具体的编码,有utf-8,gbk等,这属于外码,utf-8一个字符就1-6个字节,但是这个字符跟java中的char不是同一个概念,所以超出2个字节的生僻字无法用char表示,可以用string表示,因为生僻字可以由2个char表示,String的length()函数的返回值可能大于实际字符数,还有就是String的一个char占两个字节