我这样就行了啊
1
2
3
4
5
6
7
8
9
10
11
|
<%@ page import="java.net.*" contentType="text/html;charset=utf-8"%> < html >
< head >
< title >My JSP 'csdn.jsp' starting page</ title >
</ head >
< body >
< br >
< a href = "csdn2.jsp?name=<%=URLEncoder.encode(" 中国", "utf-8")%>">查看</ a >< br >
</ body >
</ html >
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<%@ page contentType= "text/html;charset=utf-8" %>
<html> <head>
<title>My JSP 'csdn.jsp' starting page</title>
</head>
<body>
<br>
<%= new String(request.getParameter( "name" ).getBytes( "iso8859-1" ), "utf-8" )%>
<br>
</body>
</html> |
1
2
3
|
String name = request.getParameter( "name" );
System.out.println(name); //涓浗
System.out.println(URLDecoder.decode(name, "utf-8" )); //涓浗
|
你输出的是这个的话,也就是两个字符变成三个了,那也就是说把 UTF-8 的字符转成 GBK 了,
因为 UTF-8 采用三个字节表示一个普通的汉字而 GBK 采用两个,两个 UTF-8 汉字是 6 个字节,
被强制转成 GBK 的话就会变成三个字符。
出现这个问题的原因在于,URI 参数是使用 UTF-8 编码的,而在 server.xml 中的 Connector
里的 URIEncoding 属性被改成“GBK”了。你把它改回来,改成 UTF-8 就行了,那样使用
request.getParameter("name"); 可以直接得到正确的值。
如果你不想改动 server.xml 那就得转码,因为 Tomcat 默认的 URI 传输采用 ISO-8859-1 的编码。
new String(request.getParameter("name").getBytes("iso8859-1"), "utf-8")
经过前一个项目的实践,我发现java平台里其实所有编码的字符串都可以正常显示,代码例如下
String strDefalt = ""; String strDefaltEncode = ""; String strChangeEncode = ""; try { strDefalt = "我的心不乱"; strDefaltEncode = new String("我的心不乱".getBytes(),"gbk"); strChangeEncode = new String("我的心不乱".getBytes("shift-jis"),"shift-jis"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Default charsetName="+Charset.defaultCharset().name()); System.out.println("strDefalt="+strDefalt); System.out.println("strDefaltEncode="+strDefaltEncode); System.out.println("strChangeEncode="+strChangeEncode);�
运行结果为:
Default charsetName=GBK strDefalt=我的心不乱 strDefaltEncode=我的心不乱 strChangeEncode=我的心不乱�
第一个显示的charsetName是我想打出我自己的平台里java默认的编码类型。
从而推测出第二行所表示的也就是strDefalt的字符串的编码类型为gbk。
根据第二行的推测重新将汉字转码为gbk,从而确认平台的默认编码为gbk。
而第三行,是我通过字符串转码将汉字【我的心不乱】由gbk编码转换为【shift-jis】的编码。
�
如上所示,默认的gbk的编码和shift-jis编码的汉字都可以正常的显示出来的
证明的确在平台中不同编码的字符可以正确的显示出来。
�
�� 既然不同的汉字都可以正常的显示出来,那么我们为什么有字符串乱码的情况呢。
那么我们来简单的列举下,一般都是什么情况下会出现乱码呢,据我目前的项目经历,我的答案是从数据库中取字符和在���� web项目中request给我的字符,那么这2种情况,我可以归结为这不是我在程序中所定义的字符,这些字符都是我在外界取到的。众所周知,java的 输入输出都是byte流的,而我们所取到的字符都是java平台自己将byte数据通过平台默认的编码形式将byte转换为String的。所以在这种情 况下就会出现乱码。
�
知道了原理,那么解决问题也就很简单了,那就是在byte被转化为String之前指定它的编码形式就可以了。
但有些时候我们无法再平台转码之前指定编码形式,这种情况下也是有办法的。。呵呵,,看下如下代码。
�
�
String strDefalt = ""; String strDefaltEncode = ""; String strChangeEncode = ""; try { strDefalt = "我的心不乱"; strDefaltEncode = new String("我的心不乱".getBytes(),"iso-8859-1"); String temp = new String(strDefaltEncode.getBytes("iso-8859-1"),"gbk"); System.out.println("temp="+temp); strChangeEncode = new String(temp.getBytes("shift-jis"), "shift-jis"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Default charsetName="+Charset.defaultCharset().name()); System.out.println("strDefalt="+strDefalt); System.out.println("strDefaltEncode="+strDefaltEncode); System.out.println("strChangeEncode="+strChangeEncode);
�显示结果如下
temp=我的心不乱 Default charsetName=GBK strDefalt=我的心不乱 strDefaltEncode=?????????? strChangeEncode=我的心不乱
�除了第四行显示为乱码外,其他的都正常的显示了
乱码的原因是我将gbk编码的String错误的转化为了iso-8859-1编码所以出乱码了。
第四行字符正常显示的一个原因为我将乱码的String(也就是第四行所显示的String)还原为原先的Byte(组装成String之前的), 然后再用完好的Byte转化为默认编码形式的String(第一行所表示的String)。而最后一行就是将完好的String在转化为自己想要的 shift-jis的编码的String了
其转换的原理为所谓的转码其实也就是不同的字符编码的字符集的映射顺序不同。
比如在a编码中1281可能对应的是【我】而在b编码中1281对应的是【%】所以这就出先字符的乱码现象,
而将数字转化成字符,则首先要获得目的编码数字,在映射成相应的字符。上面的字符为默认的gbk码的数字(byte)被错误的映射成了iso- 8859-1字符,所以乱码了,要转换回来的话,首先要获得gbk的数字,所以将错误的iso-8859-1字符转换为iso-8859-1数字,然后再 用这gbk的数字转换成gbk的字符,再用gbk的字符转化为shift-jis的字符。
�
�
�
�
�
�
�
�
相关推荐
asp.net中URL参数传值中文乱码的三种解决办法
从A页面通过url传参到B页面时,获取URL中参数出现中文乱码问题,解析url参数的正确方法如下,感兴趣的朋友可以参考下
jsp使用URL编码传递中文参数乱码问题
asp.net页面通过URL参数传值中文乱码问题解决办法
在使用myeclipse过程中,我使用ajax同步请求传递参数到后台却出现中文乱码,这是我解决问题的代码,希望对您有所帮助
Jsp页面在URL中传递参数会出现乱码,本人想到两种方法解决,虽然不能保证100%解决,但值得学习
下面小编就为大家分享一篇解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
javascript通过url向jsp页面传递中文参数乱码,一直都是从事jsp开发者比较烦心的是,于是本文介绍了一些解决方法,感兴趣的朋友可以了解下
在页面中对URL进行编码,最好不要在URL中传递中文参数否则会出现乱码
如果你安装的是IIS rewrite_2.0的话,传递的参数都是UTF-8格式的,如果你网站是GBK的就会出现中文连接乱码。 解决办法: rewrite_2.0规则写法: RewriteRule ^news_list_([0-9a-zA-Z\u4e00-\u9fa5]+)\.html$ news_...
本文总结分析了.Net获取URL中文参数值的乱码问题解决方法。分享给大家供大家参考,具体如下: 解决方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。 string ...
解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符... 由于我们利用URL传递参数这种方式是依
主要介绍了解决java页面URL地址传输参数乱码的方法,URL地址参数乱码问题,算是老话重谈了吧!需要的朋友可以参考下
ASP.NET的字符编码问题真是搞得人头疼,其中的中文很容易产生各种乱码问题,而这些乱码归根结底都是因为使用...因为常常需要通过URL字符串在不同页面间传递参数时遇到中文,必须进行编码和解码,否则传递的参数不正确。
本篇文章主要是对在页面上用action传递参数到后台出现乱码的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是”...
设置web.config文件 代码如下: <system> ”gb2312″ responseEncoding=”gb2312″ culture=”zh-CN” fileEncoding=”gb2312″> </system> 2.asp.net对asp.net页面传值 进行传递 string Name = “中文参数”;...
为什么用表单的方式就可以传递中文,而URL的方式就不行了呢?非得用URL传值的方式才能解决问题吗?这里我想到了动态表单,何不用它来解决呢
(1)问题出来了,当“日度指标”和“月度指标”切换的时候,由于我传递的参数为汉字,在后台获取为乱码, 于是进行给参数进行encode编码,后台UrlDecode解码,郁闷的发现还是乱码。 然后仔细对照页面的编码发现,要...