2014-12-19
XML及其子集XHTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;
的格式显示特定的字符。nnn代表该字符的十进制Unicode代码。
Java内部是Unicode编码,具体一点就是,Java的class文件采用UTF-8,JVM内部采用UTF-16编码。
byte and char
byte就是8bit组成的一个字节,是一个物理概念,char是一个unicode字符(JVM使用UTF-16编码),byte是有编码的,可能是各种各样的编码,GBK,UTF-8,ISO-8859-1等,char都是unicode的,从存储空间角度而言,一个char可能是2个byte的大小,string是由一组char组成的,处理char和string时无需考虑编码问题,Java能够正确处理各种char/string相关的各种函数,但byte和char互转时需要考虑编码问题。
char转成byte需要encoding,byte转成char需要decoding,下面几个地方需要考虑编码问题:
File IO方法中,对应的是InputStream/OutputStream和Reader/Writer,stream操作的是byte,reader/writer操作的是char。
更多阅读: http://fgaliegue.blogspot.com/2014/03/strings-characters-bytes-and-character.html
.java to .class
Java源文件一般为平台相关编码,譬如GBK,编译成class文件时,要确保编码转换正确。这一步IDE一般会处理。
.ini file
Java中的属性文件只支持iso-8859-1编码格式,因此,要想在属性文件中保存中文,需要在属性文件里使用U+xxxx的格式。
JavaScript内部支持Unicode,但只支持2字节的UFT-16编码,即UCS-2编码,这是因为JavaScript面世的时候UTF-16还没有出来。
由于JavaScript只能处理UCS-2编码,造成所有字符在这门语言中都是2个字节,如果是Unicode辅助平面上的字符,4个字节的字符,会当作两个双字节的字符处理。JavaScript的字符函数都受到这一点的影响,无法返回正确结果。