b*g
2 楼
这两天用到一个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
今天没事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
3 楼
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转回
'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
4 楼
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?
")
是
本
回
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
5 楼
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
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
相关阅读
包子求oracle java certification机经请问RequestDispatcher是干什么用的。如何快速处理大量网上xml文件? (转载)who can give an AVRO container create example?招有中文自然语言对话程序编写经验学java concurrent看哪个open source源码好? (转载)parse a number from html string with Jsoup为什么说码农是最倒霉的 (转载)请教:如何用java调用外部函数,更新数据库?问一个java design的题问一个关于Bluemix部署的问题诚信出售:电脑 自行车 电钢琴 打印机 微波炉 烧水壶等!Java concurrency的疑惑,难道我理解错了? (转载)Home web hosting with Comcast Xfinity如何提高设计能力请问 谁有 java ecommerce 项目培训视频毕向东老师上课那个视频相关的程序哪里可以下载?safari在线书库半折了, 11/30和12/1两天 (转载)编程语言请推荐复杂xml parser