再谈谈对Java C#中Unicode、编码和编码转换的理解

写这短文以前想问你们一个问题,String 类型是什么编码?那char呢?java

其实,记住一句话就好了,String 和char 都是unicode编码!!!底层的虚拟机和框架只能直接操做unicode编码。String= char[]常量+方法。因此,char的编码就是String的编码。开始学java的时候,第一节课,就告诉咱们 java的字符编码是unicode编码。因此咱们初始化char变量的时候,只能将unicode编码赋值给char.数组

例如 char c=’编';char c=(char)0x7f16 。还好,大部分编码前128个字符都是同样的,也就是ASCII的前128个字符。char c=(char)65;网络

下面说说字符编码转换框架

字符编码转换的基本原理是这样的,先将原始编码转unicode编码,再转成目标编码。编码

好比一个utf-8编码的字节数组 byte[] bytes,先是String s=new String(bytes,“utf-8”);//用utf-8编码的字节数组初始化一个unicode编码的字符串。byte[]  newBytes=s.getBytes("gb2312");//获得gb2312编码的字节数组。若是自己就是一个字符串了,就直接getBytes成目标编码就好了。若是是从网络上获得数据byte[],必定要在new String设置编码类型。若是获得的目标编码不对,那必定是字符串初始化不对。
 code

若是有人说,怎么将utf-8的字符串(String)转成gb2312的字符串,你直接上去给他几巴掌,String自己就是unicode编码,哪里来utf-8的字符串。好了,utf-8 gb2312都是对于字节数组来讲的。utf-8

C#的也是同样的原理。unicode

相关文章
相关标签/搜索