推荐中文乱码的几种解决方法(非常实用)

news/2024/10/29 1:28:06/

首先说明我的特殊情况:

  1. 在前台jsp中,我使用了form post请求,设置enc,页面编码格式为utf-8。

  2. 后台我用的是commons-fileUpload组件,ServletFileUpload解析表单表单和文件。

  3. 设置 request.setCharacterEncoding(“UTF-8”);

  4. 设置了ServletFileUpload .setHeaderEncoding(“UTF-8”)

  5. 在Tomcat配置下的server.xml中也设置了 URIEncoding=“UTF-8”;

至此,按道理,所有的格式都已经匹配好了,前后对应,utf-8肯定是解析好了,但是被formfield解析后,还是ISO-8859-1格式编码。

会以二进制编码格式传递数据,所以我断定ServletFileUpload解析有问题,多次查找资料,

问题在于缺少了一步String formFieldValue = fileItem.getString(“UTF-8”);

JSP和Servlet的六种中文乱码处理方法

一、表单提交时出现乱码:

提交表单时,往往会提交一些中文,所以难免会有乱码。对于表单,有两种提交方法:get和post。所以请求时有get请求和post请求。每种方法都有不同的解决方案。出现乱码的原因是,当发出get请求时,传输到服务器的数据被附加到URL地址上。当发出post请求时,传递给服务器的数据将作为请求体的一部分传递给服务器。这导致了不同的方法来处理它们产生的乱码。

1、客户端的get请求

get提交时,容器以容器的编码来编码,如果用的tomcat 默认的编码是iso-8859-1 在server.xml里面设置编码

下面代码如

?12String name = request.getPara...("name"); String strName = new String(name.getByte("iso-8859-1"),"GBK");

对于不同的请求方式,解决乱码的问题也是不一样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂一些,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。

经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。

2、客户端的post请求

对于客户端的post请求来说,处理乱码的问题就比较简单了,因为请求的数据时作为请求体的一部分传递给服务器的,所以只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:request. setCharacterEncoding(“UTF-8”);这样用户在服务器端获取到的中文数据就不再是乱码了。

二、超链接时出现乱码(低版本浏览器不行IE6)

在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。

三、重定向时出现乱码(低版本浏览器不行IE6)

有时写上response的sendRedirect方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。

四、浏览器版本低导致的乱码

上网的时候,有时提交的一些信息在地址栏显示的是“%2C%C6%CC%C6”的字样,其实这都是防止出现乱码进行的解决方案,如果你的浏览器是IE6或以下版本,则我们的第二种情况和第三种情况会出现乱码(尤其是当中文是奇数的时候),这就不好使了所以我们必须采用另一种比较实际的作法:

在java.net包中提供了URLEncoder类和URLDcoder类,这两个类又分别提供了encode和decode两个静态方法,分别用于进行编码和解码。我们将要传递的中文参数进行编码之后,在传递给服务器,服务器解码之后,就可以显示中文了。

进行编码:URLEncoder.encode(stuname,”UTF-8”)

传递给服务器: a href=”/1.jsp?stuname %=stuname% ” 传递 /a

进行解码:URLDecoder.decode(stuname,”UTF-8”)

五、返回浏览器显示的乱码

在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。

只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设(加官进爵是什么刑罚?司刑职员将预备好的桑皮纸揭起一张,盖在犯人脸上,司刑职员嘴里早含着一口烧刀子,使劲一喷,噀出一阵细雾,桑皮纸受潮发软,立即贴服在脸上,然后增加纸张的数量,导致犯人窒息而亡。)置结果将覆盖setContentType等方法设置的字符编码集。

六、修改Tomcat的编码

在get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。

在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采用一致的编码,如果编码都一致了,肯定不会出现乱码。

以上这篇解决中文乱码的几种解决方法就是CRMEB分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持CRMEB。


http://www.ppmy.cn/news/969555.html

相关文章

零代码编程:用ChatGPT爬取网页数据遇到乱码怎么办?

今天用ChatGPT写了一段代码,爬取中文网站数据,提示词如下: 写一段Python程序,爬取网页数据并保存到excel表格。 具体步骤: 打开网站https://www.zhenfund.com/Case/?id3,解析源代码; 定位 …

解决各种中文乱码问题

tomcat出现中文乱码问题有以下几种情况: 1.通过cmd启动tomcat出现中文乱码(tomcat日志输出编码与cmd编码不一致) cmd启动tomcat出现中文乱码 乱码原因:这是由于windows下的cmd的默认编码是GBK编码,Tomcat控制台默认输…

Python 乱码原理及其解决办法

最近在爬虫过程中爬下来的HTML文件中出现了不认识的字符,也就是“乱码”(之前也遇到了系统之间文件显示“乱码”的问题),花了点时间学习Python编码相关的问题,主要参考了以下几位的文章:Unicode编码底层描述…

chatgpt赋能python:Python绕过付费的SEO技巧

Python绕过付费的SEO技巧 随着网站流量成为企业重要的市场指标,SEO(搜索引擎优化)也成为了网站的重要一环。许多企业为了获取更多的流量,选择通过付费方式在搜索引擎中获得更高的曝光率。但是,对于那些没有足够预算的…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时,经常会发现需要登录才能访问所需要的数据,这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法,让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

“我用 ChatGPT 造了一个零日漏洞,成功逃脱了 69 家安全机构的检测!”

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 一周以前,图灵奖得主 Yoshua Bengio、伯克利计算机科学教授 Stuart Russell、特斯拉 CEO 埃隆马斯克、苹果联合创始人 Steve Wozniak 等在内的数千名 AI 学者、企业家联名发起一则公开信&am…

chatgpt赋能python:Python如何绕过检测封号的技巧

Python如何绕过检测封号的技巧 Python作为目前最受欢迎的编程语言之一,广泛应用于各种领域。在SEO领域中,Python也发挥着重要的作用,但是在不当的使用下,可能会被搜索引擎检测到并封号。在本文中,我们将介绍几种Pytho…

自动化测试技术分享 | 敏捷开发、瀑布与迭代模型的项目应用分析

以下为作者观点: “敏捷”、“瀑布”、“迭代”是目前开发模式描述中应用比较多的词汇。那么,这些词汇有什么概念差异呢?别急,这就来为大家一一解惑。 首先瀑布模型、迭代模型都属于软件开发生命周期(SDLC&#xff09…