转:http://www.cnblogs.com/newstar/archive/2011/06/13/2079870.html
我们经常会遇到编码问题。Java号称国际化的语言,是因为它的class文件采用UTF-8,而JVM运行时使用UTF-16(至于为什么JVM中要采用UTF-16,我没看过 相关的资料,但我猜可能是因为JAVA里面一个字符(char)就是16位的,而UTF-16正是双字节编码),都是unicode的编码。
unicode 的目标就是能支持世界上所有的字符集,也就是说几乎所有的字符集包含的字符在unicode中都有对应的编码。在unicode中,字符与代码的映射关 系,就是unicode字符集,称为UCS(Unicode Character Set),每个unicode字符编码称为code point(代码点?)。UTF-8和UTF-16是不同的UCS编码方法,UTF就是UCS Transformation Format。;
在Java 中,String的getBytes()方法就是对特定的字符串(unicode)按照给定的字符集进行编码(encode),new String()则可以按照某个字符集将字节流转换回unicode(decode)。Java里面的每一个String都是unicode编码。
再来看页面,如果不做特殊处理,Form的提交就按照页面的ContentType设置中的字符集进行编码转换,发送到后台,后台必须利用req.setCharacterEncoding来指定参数的编码格式(不同的应用服务器应有不同的指定方式),才能正确解码。
Java 里面的encode和decode都是相对于unicode而言的,encode的意思是将char[] --> XXX Encoding byte[],decode就是由XXX Encoding byte[] --> char[]。平常,当我们说“将GBK编码转换为UTF-8编码”的时候,实际的意思就是:GBK Encoding byte[] --> UTF-8 Encoding byte[],这种转换只有在需要用byte[]传输数据的时候才有意义,否则便是毫无意义的。
首先要说明的一点是:Java中的String对象就是一个unicode编码的字符串。
但是,我们通常会听到有人说:“我们需要将String由ISO-8859-1转换为GBK编码”,这又是怎么回事呢?实际上,我们并不是要“将 一个由ISO-8859-1编码的String转换为GBK编码的String”,反复说明的是,JAVA中的String都是unicode编码的,所以不存在“ISO- 8859-1编码的String”或“GBK编码的String”这样的说法。而需要转换的唯一的原因是String进行了错误的编码。我们经常会碰到由ISO-8859- 1转换为诸如GBK/UTF-8等等这样的需求。所谓的转换过程是:String --> byte[] -->String。
也许 你非常清楚这个过程的代码:new String(text.getBytes("ISO-8859-1"),"GBK")。但是,要真正理解起来并不是那么简单。表面上看似乎很容易理解, 不就是将text String对象按照ISO-8859-1的方式编码为byte[]然后再把它按照GBK的方式转换为String吗?但是这句代码很容易会被误解为: “将text String由ISO-8859-1转换为GBK编码”,这种说法是错误的。难道你见过用这样的代码:new String(text.getBytes("GBK"),"UTF-8")来对String进行编码转换的吗?
之所以你会经常看到new String(text.getBytes("ISO-8859-1"),"GBK")这句代码,是因为一个GBK的字节流被错误地以ISO-8859- 1的方式转换为String(unicode)了!发生这种情况最普遍的地方是一个GBK编码的网页向后台提交数据的时候,就有可能会看到这句代码的出 现。GBK的流被错误的当成ISO8859-1的流,所以便得到了一个错误的String。由于ISO8859-1是单字节编码,所以每个字节被按照原样 转换为String,也就是说,虽然这是一个错误的转换,但编码没有改变,所以我们仍然有机会把编码转换回来!所以那句经典的new String(text.getBytes("ISO-8859-1"),"GBK")便出现了。
如果系统误以为是其它编码格式,就有可能再也转换不回来了,因为编码转换并不是负负得正那么简单的
相关推荐
Java中文成Unicode码及从Unicode码转成中文
该文档有常用的java汉字unicode编码
此文档为Java中编码方式和Unicode知识总结,对了解学习Java编码的讲解很全面清楚!
Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码
在网上找资料很少有汉字直接转GBK编码格式,一般都是汉字转Unicode编码,这套是将汉字先转换成Unicode编码,在通过参照表得出汉字的GBK编码数据。虽然是一个js文件,但是加以修改可以用于很多平台上如:小程序,...
excel 公式 自动转换unicode编码为汉字
TXT电子书批量转换中文Unicode编码,这是一个批量转换的好工具。 有一些人喜欢下电子书。而很多手机不支持直接看电脑上的txt文档,所以.....
用Java做的Unicode编码转换器,可以把各国文字转换为Unicode编码,同时也可以反向转换,包含源码。
只要安装了jdk,都可以转换的简单windows命令,中文转Unicode码和Unicode码转中文,简单、方便、实用。
Unicode编码所有汉字,解压后打开cmd程序,电脑必须安装java
PowerBuilder9.0开发环境下,可以把UTF-8的编码转换为Unicode的编码格式,在pb9.0环境下测试通过。
html编码转换,unicode编码转换,url编码转换,基于framework 3.5的winform程序,自己写着玩的,有源代码,但不在压缩包里,有兴趣的可以找我要,新版本:http://download.csdn.net/source/3450168,加了选择文件和...
主要介绍了C++11 Unicode编码转换的相关资料,帮助大家更好的理解和学习c++11,感兴趣的朋友可以了解下
C#_Unicode字符串 转中文编码 和 字符串转Unicode
所有中文字Unicode编码区间及常用中文字Unicode编码,在生成随机验证码时可能使用到
易语言脚本组件转换Ascii编码与Unicode编码源码,脚本组件转换Ascii编码与Unicode编码
就是从String转换成Unicode和从Unicode转换成String编码转换
Unicode 编码范围 各国文字 Unicode 编码范围 各国文字 Unicode 编码范围 各国文字 Unicode 编码范围 各国文字 Unicode 编码范围 各国文字 Unicode 编码范围 各国文字
TXT文本批量转Unicode编码软件
中文unicode编码表