ASCII一个字节,只用7位,范围0x0-0x7f
LATIN-1(iso-8859-1)也是一个字节,兼容ASCII,范围0x0到0xff
unicode给每一个字符一个值,是规范,0x0到0x10ffff,每间隔ffff分一个plate,共17个
utf8,变长 1-6,0开头就是ASCII ,以1开头,那么连续个1的个数就是后面跟了几个字节,后面的字节10开头,然后用unicode的值依次去填充空位(高位补0),在网络传输上确实可以节省空间
utf16 变长2或者4,0xffff范围内就是2个 0x10000到0x10ffff就是4个,高2位字节以110110开头,
低2位字节以110111开头,然后也是用unicode二进制去填充
utf32 定长4,范围0x0到0x10ffff
gbk自定义编码值,没有遵守unicode规范
至于ucs-2 ucs-4 则是用定长的2位和4位保存unicode,其二进制和unicode的code point一致
java char是用2个字节的unicode,所以还是有很多字符没法正常显示的
为什么现在String有LATIN-1和UTF16,utf16 2个字节的基本都是常用的,而4个字节表示的就不常用了,如果认为字符串都是常用的,那么用utf16的某些字符串操作就更快
字符串编码问题 new和getbytes指定的编码不一致可能就会出现问题
流操作InputStreaem和OutputStream采用的编码不一致会出问题