Posted on 2006-03-16 19:44
publisher luo 阅读(619)
评论(0) 编辑 收藏 所属分类:
项目问题解决
某日一时兴起将我们的内容管理发布系统改成uft-8格式(即将所有页面encode变为utf8,mysql字符集也变成uft-8)来支持能够建立各种语言的网站(产品现在可以免费下载,网址为:http://sourceforge.net/projects/nodepublisher)。但是在修改程序过程中发现了一个问题,那就是在客户端页面提交过来的请求的编码格式在服务器端无法获知。如果提交页面的<head>里面如果包含<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,汉字部分则以utf8编码提交,如果没有的话则以gbk编码提交,而服务器端接受到的request无法判别编码格式,取到的头信息只有一些zh类似的说明,所以无法正确的将其转换成正确的编码格式。
另一需要注意的是不能将取到的参数从ISO8859转换成中文系统默认的字符集GBK,然后再转换成utf8,这样的话如果出现奇数汉字的话会导致部分汉字乱码,原因在于汉字在GBK编码中为2个byte,而在utf8编码则为3个byte,如果是偶数个汉字,从ISO8859(tomcat默认得到的request都是ISO8859编码)转换成GBK,然后再转换成ISO8859到还无妨,但是奇数个,最后一个byte不知道会怎么转换成GBK的,然后再转回到utf8时最后那个字符就会成为乱码,我想可能是跟String类里面的拆分char的方法有关,不知道谁有更加明确的分析和解释。
再一数据库方面使用mysql5,设置成utf8初始化数据脚本汉字转换成uft8,一切正常。后来无意将数据库转换成GBK编码,竟然程序运行也正常,后来经过测试将mysql设置成gbk,然后执行初始化sql脚本,汉字编码格式为GBK,程序运行依然正常。不明白其中的原由。