Java中常出现的乱码问题总结
转载请注明,大飞_Rflyee:http://blog.csdn.net/rflyee/article/details/13274907
编码也就是计算机能识别的数据与人类友好的数据的翻译过程。计算机的基本存储单位是byte,人类友好语言(汉语英语等各种语言)用char存储吧。那么编码其实就可以理解为char-byte、byte-char这样的过程。这样char-byte之间的翻译就需要一个标准了,可惜的是每个国家根据自己国家的母语设计出了不同的翻译标准,这边导致不同标准之间的翻译过程出现不统一,自然乱码问题就出现了。
常见的编码标准有很多,常用的能用识别中文的有GB2312、GBK、UTF-8、UTF-16。其中,GB2312与GBK类似,但是GBK范围更大,所以GB2312、GBK之间应该选用GBK;UTF-16每个字符都用2个字节编码,对于ASCII字符浪费空间,另外如果编码过程中有一个字节损坏则会影响后边的所有,但是编码效率相对高;UTF-8最大的特点是变长编码,1-4个字节来表示一个符号,节省空间,并且解决了UTF-16的安全问题。因此,utf-8适合网络传输(安全),utf-16适合本地磁盘和内存之间。
Java Web中常见的乱码:
1、servlet中获取请求参数乱码jsp提交到servlet中,servlet中获取
OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);b、Writer使用的编码集与文档载入内存时使用的编码集不同导致乱码,使用字节流或自己封装指定编码的字符流即可(参照方法1)。
延伸阅读:http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html
转载请注明,大飞_Rflyee:http://blog.csdn.net/rflyee/article/details/13274907