id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	due_date
117	接收点评出现乱码	qinghonggang		"'''起因：'''移动那边提交到电脑网点评系统的点评出现了乱码。
'''原由：'''移动提交过来的参数是用utf-8编码的，点评这边转码的时候用的是gbk，所以就乱了。
'''解决方式：'''new String(f.getTitle().getBytes(""gbk""),""utf-8"")。
'''详情分析：'''JVM里面的任何字符串资源都是Unicode，就是说任何String类型的数据都是Unicode编码，没有例外。既然只有一种编码，那么，我们可以这么说，JVM里面的String是不带编码的（String相当于 char[]）。 JVM里面的 byte[] 数据是带编码的，比如，Big5，GBK，GB2312，UTF-8之类的。 一个GBK编码的byte[] 转换成 String，其实就是从GBK编码向Unicode编码转换。 一个String转换成一个Big5编码的byte[]，其实就是从Unicode编码向Big5编码转换。
[[BR]]
所以，Unicode是所有编码转换的中间介质。所有的编码都有一个转换器可以转换到Unicode，而Unicode也可以转换到其他所有的编码。这样构成了一个总线结构。
[[BR]] 
我们把浏览器编码叫做 Browser_Charset，把JVM编码叫做JVM_Charset（通常等于服务器系统编码）。 当浏览器的数据过来的时候，是一个带有Browser_Charset的byte[]。 如果用户处理程序需要一个String类型的数据，那么JVM会好心好意地把这个byte[]转换成String。使用的转换器是JVM_Charset -> Unicode。 注意，如果这个时候，Browser_Charset 和 JVM_Charset并不相等。那么，这个自动转换是错误的。 为了弥补这个错误。我们需要做两步工作。
(1) Unicode -> JVM_Charset，把这个String 转换回到原来的 byte[]。 
(2) Browser_Charset -> Unicode，把这个还原的byte[]转换成 String。 
这个效果，和直接从HTTP Request取得byte[]，然后执行 (2) Browser_Charset -> Unicode 的效果是一样的。 如果在Request里面设置了CharacterEncoding，那么POST Data参数就不需要自己手工转换了，web server的自动转换就是正确的（struts的一些内部操作很导致action里面设CharacterEncoding无效）。
[[BR]]
关于字符与编码的发展过程以及原理和一些基本概念可以参看附件。
"	Bug	closed	major	2012报价库5.0	产品库	产品库3.0	fixed			28/08/2012
