`

JAVA中文字符编码问题详解(3)

    博客分类:
  • java
阅读更多

  五、对URLEncodeDecode
 
 
对于request参数的中文乱码问题,个人觉得最好的还是用URLEncode/URLDecode,因为如果你的WEB站点要支持国际化,最好就是保证从IE递送过来的参数永远是正确的UTF-8编码。
 
IE端,我们可以用JS脚本来对参数编码:encodeURIComponent(),编码后中文字符便变成了%B4%F3%BC%D2%BA%C3这种形式。在JAVA端,可以用java.net.URLDecoder.decode来解码。不过这里要注意一个问题,就是TOMCAT会自动先对URL 做一次decode,我们可以在TOMCATUDecoder类中看到这一点。不过TOMCAT并非使用了URLDecoder.decode,而是自 己编写了一个decode函数。网上有些文章上介绍过一种处理乱码的方法便是在JS中对参数做两次encodeURIComponent,在JAVA中做 一次decode,可以解决一些没有设置URIEncoding时发生的乱码问题。不过个人觉得如果弄懂了整个字符编码转换的过程,基本上是用不到这种方法的。
   
 
六、从数据库中读取中文字符数据,在页面上显示为乱码。
 
 
对于数据库中读取中文字符出现乱码的问题,本人遇到的还比较少,所以暂时没有总结。如果大家有类似的经验,欢迎补充说明,我一定注明作者身份。
 
 
好了,对各种字符乱码问题的分析就总结到这里,相信只要把握以指定编码读取--转换为UNICODE--以指定编码输入这基本步骤,初学者也可以很快 分析出字符乱码的根源所在。另外我建议不要随便使用new String(str.getBytes(enc1),enc2)这种方式来强行转码,也不要随便使用网上的字符转码函数,我觉得只会把问题隐藏更深更复杂化。我们应该清晰地分析整个字符流的编解码过程,自然可以找出乱码的根源所在,从而保证整个字符流动中,在内存中的UNICODE始终是正确的。
 
 
 
另外再附上个人总结的乱码分析的一套秘籍!即从乱码的长相来分析是哪种编码转换错误。有人可以闻香识酒,我们也来个看字识码。请看下表:

名称

示例

特点

产生原因

古文码

鐢辨湀瑕佸ソ濂藉涔犲ぉ澶╁悜涓?

大都为不认识的古文,并加杂日韩文

GBK方式读取UTF-8编码的中文

口字码

����Ҫ�¨²�ѧϰ������

大部分字符为小方块

UTF-8的方式读取GBK编码的中文

符号码

由月要好好学习天天向上

大部分字符为各种符号

ISO8859-1方式读取UTF-8编码的中文

拼音码

ÓÉÔÂÒªºÃºÃѧϰÌìÌìÏòÉÏ

大部分字符为头顶带有各种类似声调符号的字母

ISO8859-1方式读取GBK编码的中文

问句码

由月要好好学习天天向??

字符串长度为偶数时正确,长度为奇数时最后的字符变为问号

GBK方式读取UTF-8编码的中文,然后又用UTF-8的格式再次读取

锟拷

锟斤拷锟斤拷要锟矫猴拷学习锟斤拷锟斤拷锟斤拷

全中文字符,且大部分字符为“锟斤拷”这几个字符

UTF-8方式读取GBK编码的中文,然后又用GBK的格式再次读取

 

  不过个人至今仍然弄不明白的就是问号码的产生原因,问号码即所有字符几乎全部为问号的乱码。问号码的出现有多种情况。我目前能确认的当我们把中文字符强行以ISO8859-1编码写入文件后,字符的高位信息会丢失,从而再次从文件中读出字符时便全部变为问号符。而我在JAVA代码中用UTF-8的方式去读 取GBK编码的字符,出来的也是问号码,而并非口字码,这是我百思不得其解的问题。

 

分享到:
评论

相关推荐

    JAVA中文字符编码问题详解.doc

    JAVA中文字符编码问题详解.doc JAVA中文字符编码问题详解.doc

    java字符集编码乱码详解

    java字符集编码乱码详解

    Java设置String字符串编码方法详解

    Java设置String字符串编码方法详解

    Java中字符编码格式详解

    在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。本文主要给大家讲解java中字符的编码格式等相关问题

    Mysql字符集编码详解

    Mysql数据库乱码 问题彻底解决 针对JAVA

    Java Base64编码方法详解及实例分析

    在本文中,我们介绍了Base64.encodeBase64String方法的用途和功能,它是Java语言中用于Base64编码...Base64.encodeBase64String方法是Java中进行Base64编码的一种便捷实现,能够轻松地将二进制数据转换成Base64字符串。

    Java字符编码解码的实现详解

    本篇文章介绍了,Java字符编码解码的实现详解。需要的朋友参考下

    深入UTF8字符编码.doc

    UTF8字符编码:windows编码、文本工具的字符编码、Java编译器的字符编码、MySql的UTF8编码

    基于Java字符编码的使用详解

    本篇文章对Java字符编码的使用进行了详细的分析介绍。需要的朋友参考下

    Java开发详解.zip

    031216_【第12章:JAVA IO】_字符编码笔记.pdf 031217_【第12章:JAVA IO】_对象序列化笔记.pdf 031218_〖第12章:JAVA IO〗_实例操作—单人信息管理程序笔记.pdf 031219_〖第12章:JAVA IO〗_实例操作:投票程序...

    详解Java中String类型与默认字符编码

    主要介绍了Java中String类型与默认字符编码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java中的String类getBytes()方法详解与实例

    在本文中,我们学习了Java String类的getBytes()方法,它允许将字符串转换为字节数组,并且可以指定字符编码方式。通过实例和代码演示了使用平台默认字符编码和指定UTF-8、ISO-8859-1字符编码的情况。getBytes()方法...

    javascript url几种编码方式详解

    1. escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,escape()不对”+”编码主要用于汉子编码,现在已经不提倡使用了。 2. encodeURI()是...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-049-Java基本语法-通过ASCII再理解字符编码.avi 北京动力节点-Java编程零基础教程-050-Java基本语法-ASCII.avi 北京动力节点-Java编程零基础教程-051-Java基本语法-ISO8859-1....

    CSDN.rar_简繁体_股票 java

    Java中文问题详解 Vector在Java编程中的应用 编写高级应用程序1 编写高级应用程序2 实现 Swing 的 JTables 和 Excel 间的复制和粘贴功能 实 现JAVA 的 动 态 类 载 入 机 制 使用Java实现数据报通讯过程 使用...

    Java中的正则表达式 -- 示例详解

    众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一...

    Golang中的Unicode与字符串示例详解

    Go语言字符编码 注意: 在Golang语言中的标识符可以包含 ” 任何Unicode编码可以标识的字母字符 “。 被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是 “�”,即:一个仅由高亮的问号...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 1.2.3 配置环境变量 6 1.2.4 测试环境是否安装成功 8 1.2.5 如果失败了怎么办? 9 1.3 让自己的第一个程序运行起来 10 1.3.1 编写自己的Hello ...

Global site tag (gtag.js) - Google Analytics