`

中文乱码在java中URLEncoder.encode方法要调用两次解决

阅读更多

        在工作中,需将第三方的内容放到我网页中,但第三方的内容却是由xml,导致页面显示有问题(乱码),于是需用URLEncoder.encode(content, StandardCharsets.UTF_8.name());语句做编码处理。

        在查资料时,发现《中文乱码在java中URLEncoder.encode方法要调用两次解决》不错,于是转载如下。

        因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的编码格式自动解码一次,所以前台编码一次后台解码一次而解码和编码的方式不用所以造成了乱码的出现,这就类似于以下代码:

String name=java.net.URLEncoder.encode("测试", "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "ISO-8859-1"));

        编码后的是%E6%B5%8B%E8%AF%95。。

        而用ISO-8859-1解码后的是???è?。。

        但是如果调用的是

System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));

        则结果是打印“测试”。

        这就印证了之前为什么我在servlet中调用java.net.URLDecoder.decode(request.getParameter("name"), "UTF-8")方法和调用java.net.URLDecoder.decode(request.getQueryString(), "UTF-8")所得到的结果是不一样的,就是由于在request.getParameter("name")之前会自动做一次解码的工作,而且是默认的ISO-8859-1。

        所以,在使用java.net.URLEncoder.decode()和java.net.URLDecoder.decode(),的时候需要在前端页面中使用两次java.net.URLDecoder.decode()方法。

        使用两次编码的过程相当于如下代码:

String name=java.net.URLEncoder.encode("测试", "UTF-8");
System.out.println(name);
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
name=java.net.URLDecoder.decode(name, "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));

        输出为:

%E6%B5%8B%E8%AF%95
%25E6%25B5%258B%25E8%25AF%2595
%E6%B5%8B%E8%AF%95
测试

        第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。

 

文章来源:http://www.cnblogs.com/shitou/archive/2011/07/04/2097427.html

分享到:
评论

相关推荐

    解决url中文乱码.doc

    3. **解决URL乱码**:在`Index.jsp`中,两个按钮点击事件分别调用了`doSubmit()`和`doAction()`函数,这两个函数使用`URLEncoder.encode()`对中文字符串进行编码,确保在URL中传输时不出现乱码。例如: ```java ...

    JSP中解决中文乱码的万能方法

    ### JSP中解决中文乱码的万能方法 在JSP开发过程中,中文乱码问题是一个常见的技术难题,尤其在处理客户端与服务器之间的数据交互时更为突出。本文将详细介绍几种有效的解决方案,帮助开发者应对各种场景下的乱码...

    android中js与java间函数相互调用demo,支持中文传参,无乱码

    本教程将详细讲解如何在Android中实现JS与Java的双向函数调用,以及如何处理中文参数传递时的乱码问题。 1. **WebView组件** Android中的`WebView`组件是实现JavaScript与Java交互的基础。`WebView`可以加载HTML、...

    dicuz_ucenter_api (java版本)[含用法且已解决中文乱码]

    《DZ论坛Ucenter API Java版详解:解决中文乱码问题及使用指南》 DZ论坛,即Discuz!,是中国最流行的社区软件之一,其Ucenter是集成用户管理、登录验证、同步登录等功能的核心组件。为了方便Java开发者与DZ论坛进行...

    html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    在这里碰到的问题是:调用java.net.URLEncoder的encode()方法时,如果没有显示指定字符集参数,那么URLEncoder会使用默认字符集。这个默认字符集在Eclipse里跑main()方法和在Tomcat里跑Web应用,得到的结果不一样,...

    文件下载response.setHeader()下载中文文件名乱码问题解决办法.pdf

    通过调用URLEncoder.encode()方法,将文件名转换成UTF-8编码的字符串,并将其嵌入到Content-Disposition响应头中。这样,当浏览器接收到响应时,它会解析这个响应头,并将经过编码的文件名还原为用户可理解的形式,...

    doget和dopost中文乱码问题1

    例如,在Java中,可以使用URLEncoder.encode()方法对中文字符进行编码;在Python中,可以使用urllib.parse.quote()方法对中文字符进行编码。 常见的DOGET和DOPOST中文乱码问题 1. 中文字符乱码 在使用DOGET和...

    Java应用下载文件功能,输出文件名中的中文乱码

    在Java应用中实现文件下载功能时,经常遇到的一个问题是输出文件名中的中文字符会出现乱码。这主要是因为HTTP协议在传输文件名时,默认使用的是ISO-8859-1编码,而中文字符在此编码下无法正确解析,从而导致乱码的...

    java多种解决乱码方案详细资料大全

    - 在处理URL时,可能会遇到非ASCII字符的乱码问题,可以使用`URLEncoder.encode(urlString, "UTF-8")`进行编码,`URLDecoder.decode(encodedUrl, "UTF-8")`进行解码。 3. HTTP响应编码: - 当从HTTP响应中获取...

    解决Servlet中文乱码问题.docx

    例如,在超链接中使用`URLEncoder.encode()`方法。 3. **浏览器显示乱码** 如果浏览器显示乱码,通常是因为响应的编码设置不正确。可以通过以下两种方式设置响应的字符编码: - **设置Content-Type响应头**: ...

    中文乱码解决方案参考.pdf

    中文乱码问题在IT行业中是常见的困扰,尤其是在Web开发中。本文主要探讨了在使用Tomcat作为servlet容器,浏览器包括Firefox和IE6时,如何处理中文乱码问题。问题的核心在于字符编码的统一和正确转换。 首先,为了...

    彻底解决jsp中用SmartUpload上传附件中文乱码问题实用.pdf

    在Java Web开发中,使用SmartUpload组件上传附件时,可能会遇到中文文件名乱码的问题。这个问题通常涉及到字符编码的处理,特别是在不同的操作系统和Web服务器环境下。以下是对彻底解决该问题的详细解析: 首先,...

    servlet的程序编写的乱码处理

    在开发Web应用程序时,尤其是在使用Java Servlet技术的过程中,中文乱码问题是一个常见的难题。本文档将详细讲解如何处理Servlet中的中文乱码问题,包括POST请求、GET请求以及通过`sendRedirect()`重定向时可能出现...

    使用拦截器解决中文乱码问题.docx

    例如,如果在显示用户输入时,应该使用服务器端的转义函数,如Java的`java.net.URLEncoder.encode()`。 4. **最佳实践** 虽然使用拦截器解决了乱码问题,但最佳实践是在整个应用中保持一致的字符编码。确保所有的...

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    2. **URL重写**:在JSP页面上,使用`URLEncoder.encode()`方法对URL参数进行编码,确保它们在传输过程中是以指定的字符集(例如UTF-8)编码的。在服务器端,使用`URLDecoder.decode()`进行解码。 3. **服务器配置**...

    JSP支持中文下载小例

    在Java中,我们可以使用`java.net.URLEncoder.encode()`方法来编码文件名,确保其符合URL的规范。例如: ```java String fileName = "测试文档.txt"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8...

    解决Cookie读写中文

    在本文档中,我们探讨了如何在Java Web应用中解决Cookie读写中文的问题。这个问题通常出现在处理中文字符时,由于编码不一致导致的乱码问题。以下是一些关键知识点和解决方案: 1. **编码问题**:在Web开发中,特别...

    GWT发送HTTP请求简明教程

    1. 在服务器端确保正确的字符编码设置,如在Java Servlet中使用`response.setCharacterEncoding("UTF-8")`。 2. 在GWT客户端,如果使用POST请求,确保`RequestBuilder`的`Content-Type`设置为`"application/x-...

    jsp实现文件下载功能

    - 使用`URLEncoder.encode()`方法对文件名进行URL编码,避免中文等特殊字符导致的问题。 3. **发送文件**: ```jsp RequestDispatcher dis = application.getRequestDispatcher(filedownload); if (dis != null...

    HttpClient PostMethod 上传文件

    1. URL编码:在添加GET请求参数时,使用URLEncoder.encode方法对非ASCII字符进行编码。 2. 请求头设置:在Post或Get请求中,设置合适的字符集,如"Content-Type: application/x-www-form-urlencoded; charset=UTF-8...

Global site tag (gtag.js) - Google Analytics