解析Java WEB中文乱码问题根源
4.2. 并不可靠的工具和服务器
习惯上,我们总是认为我们使用的开源工具或者商业服务器是正确的,起码是没有大问题的。这个假设在很多时候正确,但是在中文问题方面,并非如此。别忘了多数软件的作者都是欧美人,他们中的很多并不懂也不关心中文或者其他双字节字符集的问题。因此有些工具或者应用服务器在中文处理方法上模糊不清,或者根本错误(真正可怕的是某些国产商业软件都是错误的)。
这给我们的工作增加了很多难度,因为你的代码在别人的应用服务器上运行,有时候你必须适应他们代码里面的错误。
有很多工具有提供所谓的转码功能,在你弄清楚它到底是做什么之前,不要贸然使用,起码要做一个备份。已经有不少人使用这种“电子碎纸机”杀死了自己的中文数据。
就连java的规范本身,也存在漏洞,比如String.getBytes()这个函数。其设计就是根本错误的,尽管新版的jdk已经声明废止这个函数,但是很多人还在使用。又如URI的编码方式,servlet规范并没有指出应该如何设置,这才导致了tomcat实用自定义的URIEncoding参数。
5. 小结
作为一般的应用开发者,没有必要去深究中文字节的每个转换过程。但是,我们需要记住,中文存在很多种形式,而Java如何处理这些形式,需要程序员告知。
简单的说,最可靠的处理办法,就是保证中文在每一个环节都正确。这并不是废话。如果程序员严格按照规范的推荐,设置所需要的各种参数,最后即使遗漏了什么,也是很容易找到原因的。相反,如果走所谓的捷径,有意的疏漏或者错误设置字符集,或用大串的getBytes()进行可疑的转换,也许可以得到似乎正确的结果,但是当问题出现的时候,就很可能成为死结了。
0
相关文章