`

url中文参数传递乱码

 
阅读更多

我这样就行了啊

XML/HTML code?
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>



Java code?
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>





Java code?
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参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    jquery获取URL中参数解决中文乱码问题的两种方法

    以上就是解决在使用jQuery获取URL参数时出现中文乱码问题的两种方法,以及相关的编码和解码处理方式。需要注意的是,乱码问题的出现主要是由于编码和解码不一致导致的,所以在前后端处理URL参数时,一定要注意正确地...

    ajax传递中文参数乱码解决办法

    因此,对于需要作为参数传递的数据,推荐使用`encodeURIComponent()`。 **示例代码**: ```javascript var drugName = "中药名称"; // 使用encodeURIComponent进行编码 drugName = encodeURIComponent(drugName); `...

    奇数个中文字符url传递乱码

    本文将深入探讨“奇数个中文字符URL传递乱码”的问题,并提供一种可行的解决方案。 ### 一、问题背景 #### 1.1 URL编码概述 URL(Uniform Resource Locator)用于标识互联网上的资源位置。由于某些字符在URL中具有...

    jsp使用URL编码传递中文参数乱码问题

    jsp使用URL编码传递中文参数乱码问题

    url地址传参中文乱码处理

    URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给服务器时,可能出现乱码的情况。这种情况可能是由于编码问题或Tomcat服务器的配置问题引起的。 在处理URL地址传参中文乱码时,通常有三种解决方案: ...

    URL传参数时中文乱码解决方法

    在IT领域,尤其是在Web开发中,处理URL传递参数时遇到中文乱码是一个常见的问题,尤其当数据需要跨系统或在不同编码环境下传输时更为显著。本文将深入探讨URL传参数时中文乱码的原因、影响以及如何有效解决这一问题...

    asp.net页面通过URL参数传值中文乱码问题解决办法

    在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    // 发送POST请求,并将编码后的中文参数拼接到URL中 conn.open("POST", "/SanXiaMS/servlet/AccountBookServlet1?CustomFormName=" + CustomFormName1, false); conn.send(null); // 获取服务器响应结果 var ...

    URL传中文参数导致乱码的解决方案之encodeURI

    在Java环境中,可以使用`java.net.URLDecoder`类的`decode`方法,指定UTF-8编码来解码URL参数。例如: ```java String starName = java.net.URLDecoder.decode(request.getParameter("star_name"), "UTF-8"); ``` ...

    Jsp页面在URL中传递参数会出现乱码问题解决

    本文将详细介绍两种解决JSP页面URL参数乱码的方法,虽然不能保证100%有效,但它们是实践中常用且有效的解决方案。 **方法一:修改Tomcat配置** 1. 首先,我们需要进入Tomcat服务器的配置目录,通常是`$CATALINA_...

    GET方法URL中传递中文参数乱码的解决方法

    然而,当我们在GET请求的URL中直接传递包含中文字符的参数时,可能会遇到乱码问题。这是因为不同系统、浏览器和服务器对字符编码的支持不一致,导致在传输过程中中文字符无法正确解析。以下是对这个问题的深入探讨和...

    C++Http上传文件到web服务器,解决中文参数乱码

    微软提供的CHttpConnect类在处理这种场景时可能存在不足,因此我们需要理解如何正确地编码和传递中文参数。 首先,让我们了解HTTP请求的基本结构。一个POST请求通常包括一个请求行、请求头和请求体。请求头可能包含...

    servlet url传递中文参数

    `getParameter()`方法可以用来获取URL参数,但如果参数值包含非ASCII字符,需要先进行解码: ```java String paramName = "myParam"; String encodedParam = request.getParameter(paramName); String ...

    解决url中文乱码.doc

    4. **接收参数**:在接收URL参数的页面,例如`Succ.jsp`,需要设置请求的字符编码,确保能够正确解析带有中文的URL参数。在JSP页面的顶部添加: ```java ("UTF-8"); %&gt; ``` 这行代码确保了请求的字符编码为UTF-8...

    解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题

    解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题 SpringMVC 是一个基于模型-视图-控制器(MVC)模式的Web应用程序框架,广泛应用于Java Web开发中。但是,在使用SpringMVC时,常见的一个问题是...

    javascript通过url向jsp页面传递中文参数导致乱码解决方案

    因此,当URL参数中包含中文时,如果后端JSP页面没有设置正确的字符编码,就会导致乱码。 为了彻底解决这个问题,有以下两种编码方法: 1. 在JavaScript端对URL进行两次编码。 2. 在JSP端对参数进行一次解码。 ...

    解决JS传递中文乱码问题

    3. **URL参数传递**:在URL中传递含有中文的参数。 #### 二、问题分析 乱码产生的根本原因在于字符编码不一致或编码转换错误。具体来说,在数据传输过程中涉及到以下几个关键环节: 1. **客户端编码**:前端页面...

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    3. **URL解码**:在服务器端接收到URL参数后,需要使用`java.net.URLDecoder.decode()`方法进行解码,同样指定UTF-8编码。例如:`URLDecoder.decode(request.getParameter("paramName"), "UTF-8")`。 4. **服务器...

    Spring MVC参数传递中文乱码解决方法分享

    Spring MVC参数传递中文乱码解决方法分享 在 Web 开发中,参数传递中文乱码问题是一个常见的问题,特别是在使用 Spring MVC 框架时。这篇文章将详细介绍 Spring MVC 参数传递中文乱码解决方法,并提供了多种解决...

Global site tag (gtag.js) - Google Analytics