[200分] 写完一篇关于乱码问题的文章,真心关注者有分

低调的小青蛙 2006-01-24 03:58:06
讲解了编码问题的由来,乱码问题产生的内在原因。纠正概念上理解的错误。希望能够对部分兄弟们有些帮助。

真心关注,并提出评价,或者意见,或者建议者有分。
不打开文章看,就直接接分者无分。

页面地址:
http://www.regexlab.com/zh/encoding.htm
...全文
1718 77 打赏 收藏 转发到动态 举报
写回复
用AI写文章
77 条回复
切换为时间正序
请发表友善的回复…
发表回复
xelam 2006-07-06
  • 打赏
  • 举报
回复
搂主,真的很感谢你,这几天我正因为乱码问题而头疼得要命了,
试了好多好多种网上提供的方法,但是都因为只是看到的是方法,
而不明白其具体的原理,以及为什么那么做。所以造成了很多很多的误解,
也走了很多的弯路。
现在看了您的文章后,虽然没有什么具体的方法,但起码让我真正明白这个乱码的原理了。
我觉得我现在结合以前在网上所看到的纵方法一定能解决我的乱码问题了!

谢谢!!!(我要把您的这篇文章收藏了。)
futo 2006-06-17
  • 打赏
  • 举报
回复
rootcn(沙砾),你说“下面会描述一个更好的处理办法”

办法在那里?我就遇到这个问题了,url上的中文解决不了
qqulijun 2006-06-17
  • 打赏
  • 举报
回复
支持
fionazou 2006-06-09
  • 打赏
  • 举报
回复
一句话URL传递中文出现乱码与tomacat版本有关系!!
chenfulei 2006-06-02
  • 打赏
  • 举报
回复
我有一个问题想请教一下,我上传文件的时候,往本地(windows xp)传是能正确得到文件名的(FormFile file = vo.getFile(); String fileName = file.getFileName();) 譬如:はは.csv 日文系统。而放到linux服务器上的时候,表单提交后就不能正确地得到文件名了,变成了[ Dsv ]没有点了 而且名字也变了,这就导致取不到文件了,这个是什么原因导致的,如何解决呢?谢谢了。
rootcn 2006-06-02
  • 打赏
  • 举报
回复
找了一段URL编码的说明, 但不够详细.
http://china.eceel.com/article/study_for_character_encoding_java.htm

5.1. URL编码

对于URL中的一些特殊字符,浏览器会自动进行编码。这些字符除了"/?&"等外,还包括unicode字符,比如汉子。这时的编码比较特殊。

IE有一个选项"总是使用UTF- 8发送URL",当该选项有效时,IE将会对特殊字符进行UTF-8编码,同时进行URL编码。如果改选项无效,则使用默认编码"GBK",并且不进行 URL编码。但是,对于URL后面的参数,则总是不进行编码,相当于UTF-8选项无效。比如"中文.html?a=中文",当UTF-8选项有效时,将发送链接"%e4%b8%ad%e6%96%87.html?a=\x4e\x2d\x65\x87";而UTF-8选项无效时,将发送链接"\x4e\x2d\x65\x87.html?a=\x4e\x2d\x65\x87"。注意后者前面的"中文"两个字只有4个字节,而前者却有18个字节,这主要时URL编码的原因。

当web server(tomcat)接收到该链接时,将会进行URL解码,即去掉"%",同时按照ISO8859-1编码(上面已经描述,可以使用URLEncoding来设置成其它编码)识别。上述例子的结果分别是"\ue4\ub8\uad\ue6\u96\u87.html?a=\u4e\u2d\u65\u87"和"\u4e\u2d\u65\u87.html?a=\u4e\u2d\u65\u87",注意前者前面的"中文"两个字恢复成了6个字符。这里用"\u",表示是unicode。

所以,由于客户端设置的不同,相同的链接,在服务器上得到了不同结果。这个问题不少人都遇到,却没有很好的解决办法。所以有的网站会建议用户尝试关闭UTF-8选项。不过,下面会描述一个更好的处理办法。
rootcn 2006-06-02
  • 打赏
  • 举报
回复
chenfulei
你上传文件时,文件名编码需要转换成 linux 系统编码.才会正常保存.

读取的时候同样需要由系统编码转换为相应的正确编码(日文).
rootcn 2006-06-01
  • 打赏
  • 举报
回复
读了文章有一些了解, 我现在也遇到编码的问题了.

String url = "index.jsp?message=中文";
url = new String(url.getBytes("GBK"), "ISO-8859-1");
response.redirect(url);

之后的 windows 下的地址就变为: "index.jsp?message=%D6%D0%CE%C4"
可以解析出正确的文字

FreeBSD 下的地址变为: "index.jsp?message=%C3%96%C3%90%C3%8E%C3%84"
解析不出来, 不知有什么办法?
其中 tomcat 的配置都是相同的. jsp 文件的编码为 utf-8
低调的小青蛙 2006-04-26
  • 打赏
  • 举报
回复
To CristinNa(深白色) 兄:

从你回帖的速度上看,我认为你还没来得及仔细阅读和理解。掌握编码问题关键是一些概念问题,因此 CristinNa(深白色) 兄不用着急。还请多多指教。
CristinNa 2006-04-26
  • 打赏
  • 举报
回复
看过http://tech.sina.com.cn/s/s/2004-11-15/1403459384.shtml这篇文章后
是在不敢恭维楼主了,请楼主不要见怪
CristinNa 2006-04-26
  • 打赏
  • 举报
回复
呵呵,楼主对字符编码的历史和底层剖析得还可以啊
CristinNa 2006-04-26
  • 打赏
  • 举报
回复
呵呵,楼主的文章可以嘛,值得收藏!
sxwblue 2006-04-21
  • 打赏
  • 举报
回复
初学,经常碰到这个问题,谢了~~
Silo 2006-04-12
  • 打赏
  • 举报
回复
受益匪浅,揭帖了也要mark
cszj 2006-03-26
  • 打赏
  • 举报
回复
学习中,我用的TOMCAT服务器,现在有一问题,我用HREF写了一链接,如果其中没有中文链接指向没问题,如果包含中文就找不到链接,中文部分显示为乱码,除非把IE中高级选项中总是以UTF-8发送选项勾去掉才能正常找到链接,各位高手有无其他好的解决方法
IT佬 2006-02-10
  • 打赏
  • 举报
回复
我就正在找这东西呢。
TinyJimmy 2006-02-10
  • 打赏
  • 举报
回复
写得不错嘛, 比较容易懂. 以前学习的时候花了很多时间, 都是自己一点点摸索出来的. 可没想过这么详细的总结出来.

支持!!
piaopiao11 2006-02-10
  • 打赏
  • 举报
回复
tomcat 的request.getParameter() 乱码可以改server.xml文件

<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="GBK"/>
霖湘凝 2006-02-10
  • 打赏
  • 举报
回复
支持~学习
OO00 2006-02-09
  • 打赏
  • 举报
回复
加载更多回复(57)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧