由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 一个想不明白的编码问题
相关主题
请教个html显示utf8 string的问题 (转载)System.in如何使用UTF-8?
SpringMVC可否直接处理doGet?JSF 链接中的变量
显示email中文的问题A question about Content-type & encoding
请教汉字的utf-8 mapping (转载)Java Server Faces
我脑袋短路,大家来帮一下:java问题:如何match两个正规表达式
一道 JAVA Stack vs Heap 题SOAP over SMTP
实实在在受不了了,还是来这里求教!Object比较
怎麼得到字符串中的raw bytes?Design thought.. Sugguestions?
相关话题的讨论汇总
话题: string话题: 8859话题: utf话题: iso话题: modtext
进入Java版参与讨论
1 (共1页)
b***g
发帖数: 6
1
这两天用到一个servlet, 需要处理中文的,所有的编码都用的utf8, 没什么问题,可是
今天没事play with it的时候,发现下面这一段:
String inputText = request.getParameter("input");
String modText = new String(inputText.getBytes("ISO-8859-1"), "UTF-8")
;
myPrintWriter.println(modText);
基本上就是读入输入的中文,然后原样打印出来。但是我发现,其中第二句不管加上还是
去掉,在网页上显示的都是正确的中文。ISO-8859-1应该是只支持拉丁字母的
characterset, 所以inputText.getBytes("ISO-8859")这个操作应该会丢失inputText本
来来储存的中文信息,因为在8859-1的characterset里map不到,这样即使再用utf-8转回
来,也不应该是原来的信息了。可是为什么在我的test里面,不管有没有这句都没有区别
呢。bt
t****5
发帖数: 20
2
check javadoc of getBytes()
'the behavior is undefined' if string is beyond the charset.
the impl happens to decide just returning all the damn bytes.


")




【在 b***g 的大作中提到】
: 这两天用到一个servlet, 需要处理中文的,所有的编码都用的utf8, 没什么问题,可是
: 今天没事play with it的时候,发现下面这一段:
: String inputText = request.getParameter("input");
: String modText = new String(inputText.getBytes("ISO-8859-1"), "UTF-8")
: ;
: myPrintWriter.println(modText);
: 基本上就是读入输入的中文,然后原样打印出来。但是我发现,其中第二句不管加上还是
: 去掉,在网页上显示的都是正确的中文。ISO-8859-1应该是只支持拉丁字母的
: characterset, 所以inputText.getBytes("ISO-8859")这个操作应该会丢失inputText本
: 来来储存的中文信息,因为在8859-1的characterset里map不到,这样即使再用utf-8转回

b***g
发帖数: 6
3
Thanks for the help. 今天又作了一些测试,结果发现了更多的问题,原来这个
String modText = new String(inputText.getBytes("ISO-8859-1"), "UTF-8");
是起作用的,如果不加这句,存进database就是乱码,加了这句,才能正常存储中文。
servlet 相关的命令如下:
request.setCharacterEncoding("UTF-8");
...
String inputText = request.getParameter("input");
String modText = new String(inputTextgetBytes("ISO-8859-1"), "UTF-8");
...
save to database
如果去掉转变编码的那一句,就不能正确存储. 可是我的jsp的content type 设的是
charset="UTF-8", request也设成了UTF-8, 为什么还需要用8859-1转化呢,真是百思不
得其解。难道是tomcat的bug?
")


t****5
发帖数: 20
4
in that case, my theory is that your browser sends in GB, and can
dispay GB, regardless of chartset specification.
you can not rely on a browser to check the bytes, look into HTTP
traffic directly to see what is sent between server and browser.
last time I know, it's a mess how browsers encode/escape request data.
lots of ambiguities, there is no way on server to interprete it
100% correctly. (yeah there are standards defining how it *shoud* be, but...

【在 b***g 的大作中提到】
: Thanks for the help. 今天又作了一些测试,结果发现了更多的问题,原来这个
: String modText = new String(inputText.getBytes("ISO-8859-1"), "UTF-8");
: 是起作用的,如果不加这句,存进database就是乱码,加了这句,才能正常存储中文。
: servlet 相关的命令如下:
: request.setCharacterEncoding("UTF-8");
: ...
: String inputText = request.getParameter("input");
: String modText = new String(inputTextgetBytes("ISO-8859-1"), "UTF-8");
: ...
: save to database

1 (共1页)
进入Java版参与讨论
相关主题
Design thought.. Sugguestions?我脑袋短路,大家来帮一下:
The best HashMap Cache solution一道 JAVA Stack vs Heap 题
interesting "protect" behavior实实在在受不了了,还是来这里求教!
Question: reflection and generics怎麼得到字符串中的raw bytes?
请教个html显示utf8 string的问题 (转载)System.in如何使用UTF-8?
SpringMVC可否直接处理doGet?JSF 链接中的变量
显示email中文的问题A question about Content-type & encoding
请教汉字的utf-8 mapping (转载)Java Server Faces
相关话题的讨论汇总
话题: string话题: 8859话题: utf话题: iso话题: modtext