Java中解决POST和GET请求的中文乱码问题
jspjava乱码解决

中文乱码总结:1-->响应中的乱码:单个页面中,如果出现中文(注意不是post中文也不是get中文,只是显示中文而已),而且使用的是<%@page contentType="text/html;charset=iso-8859-1"%> 此时显示的中文就是乱码,为什么呢?因为charset=iso-8859-1 是设置http的响应(response)中的编码信息,因为是中文,所以http给浏览器显示的汉字是乱码。
2-->post乱码:两个页面(或多个页面)通过form表单post传值(form的默认提交方式都是GET)时,这里与1不同,为什么呢?因为此时发送了请求有request,而1中没有request只是响应而已。
发送请求的时候,使用的编码默认的是iso-8859-1,意味着只有英文是有效字符,这个限制是因为当初指定http标准的成员都来自英语国家,所以如果使用默认的方式从请求获取数据,中文一定会全部变成乱码。
此时就要加上request.setCharacterEncoding("gbk");有了请求request.setCharacerEncoding("gbk")编码方式和http的响应(response)中的编码信息<%@pagecontentType="text/html;charset=gbk"%>两个都gbk,此时body中的(注意是body,如果是url就会有问题往下看就知道了)中文就不会显示为乱码a---乱码出现的过程是这样的,传的是汉字,发送请求的默认编码是iso-8859-1,此时把汉字按iso-8859-1转码出现问题出现??或莫名的符号,响应的时候位数都打乱了(iso-8859-1和gbk编码位数不一样),虽然<%@pagecontentType="text/html;charset=gbk"%>但还是会出现乱码。
中文参数乱码问题解决方案(精选5篇)

中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
Java中文乱码问题产生原因分析

Java中文乱码问题产生原因分析在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上。
对于我们所看到的字符,也是以二进制数据的形式存在的。
不同字符对应二进制数的规则,就是字符的编码。
字符编码的集合称为字符集。
17.1.1 常用字符集在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母、数字符号和一些常用符号(包括控制符号),对这些字符进行编码,用1个字节就足够了(1个字节可以表示28=256种字符)。
然而实际上,表示这些字符,只使用了1个字节的7位,这就是ASCII编码。
1.ASCIIASCII(American Standard Code for Information Interchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。
每一个ASCII码与一个8位(bit)二进制数对应。
其最高位是0,相应的十进制数是0~127。
例如,数字字符“0”的编码用十进制数表示就是48。
另有128个扩展的ASCII码,最高位都是1,由一些图形和画线符号组成。
ASCII是现今最通用的单字节编码系统。
ASCII用一个字节来表示字符,最多能够表示256种字符。
随着计算机的普及,许多国家都将本地的语言符号引入到计算机中,扩展了计算机中字符的范围,于是就出现了各种不同的字符集。
2.ISO8859-1因为ASCII码中缺少£、ü和许多书写其他语言所需的字符,为此,可以通过指定128以后的字符来扩展ASCII码。
国际标准组织(ISO)定义了几个不同的字符集,它们是在ASCII码基础上增加了其他语言和地区需要的字符。
其中最常用的是ISO8859-1,通常叫做Latin-1。
Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127的字符与ASCII码相同。
ISO 8859另外定义了14个适用于不同文字的字符集(8859-2到8859-15)。
Javaweb中常见编码乱码问题(一)

Javaweb中常见编码乱码问题(⼀) 最近在看Java web中中⽂编码问题,特此记录下。
本⽂将会介绍常见编码⽅式和Java web中遇到中⽂乱码问题的常见解决⽅法:⼀、常见编码⽅式: 1、ASCII 码 众所周知,这是最简单的编码。
它总共可以表⽰128个字符,0~31是控制字符如换⾏、回车、删 除等,32~126是打印字符,可以通过键盘输⼊并且能够显⽰出来的。
2、ISO-8859-1 它是基于ASCII码基础上扩展的,它总共能表⽰256个字符,涵盖了⼤多数西欧语⾔字符。
详见 该编码不⽀持中⽂,举个中⽂编码栗⼦: 字符串“I am 君⼭”⽤ ISO-8859-1 编码,下⾯是编码结果: 由于ISO-8859-1 是单字节编码且不⽀持中⽂,直接将中⽂字符转成‘3f’, 3f也就是常见的"?"字符 3、GB2312 它是双字节编码,共包含6763个汉字。
4、GBK 汉字内码扩展规范,是基于GB2312上拓展的,加⼊了更多的汉字,能表⽰21003个汉字。
它的编码 是和GB2312兼容的。
也就是说⽤GB2312编码的汉字可以⽤GBK来解码,并且不会乱码。
倒过来就不完 全可以了,因为GB2312描述的汉字⽐GBK少。
5、UTF-16 UTF-16是基于Unicode上定义的,⽤两个字节来表⽰Unicode的转换格式,它采⽤定长的表⽰⽅法, 即不能什么字符都可以⽤两个字节表⽰。
两个字节是16个bit,所以就做UTF-16。
(Unicode 囊括了世界 上所有语⾔,所有语⾔均可通过Unicode来相互翻译,详解) 6、UTF-8 由于UTF-16统⼀采⽤两个字节来表⽰⼀个字符,有很多字符⽤⼀个字节表⽰即可。
所以存储空间放 ⼤了⼀倍,还会增加⽹络传输的流量,所以推出了UTF-8。
UTF-8采⽤了⼀种变长技术,每个编码区域有 不同的字码长度。
通过上⾯介绍和对⽐,对于中⽂字符的处理我想UTF-8是最理想的中⽂编码。
java中文乱码常见解决方式

java中⽂乱码常见解决⽅式说明项⽬出现中⽂乱码现象、常见编码解决⽅法如下。
项⽬乱码项⽬⼯作空间在 Windows -> Prefenrences -> General -> Workspace 中进⾏设置在创建项⽬⼯作空间的时候、优先设置编码,在该⼯作空间下创建的项⽬默认遵循⼯作框架配置项⽬编码在 Project -> Resource中设置创建项⽬的时候、设置编码,则项⽬下⽂件都将会和项⽬统⼀页⾯⽂件编码⽂件右键 Properties -> Resource⽂件头编码⽂件头⼀般是HTML、JSP标签头部添加编码JSP:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>HTML:添加在<head>标签⾥⾯<meta http-equiv="Content-Type" content="text/html; charset=utf-8">编辑器编码设置NotePad++编辑器打开⼀个⽂件时候乱码在 菜单 -> 格式记事本存储时,保存为UTF-8格式服务器乱码SpringMVC在web.xml添加<filter><description>字符集过滤器</description><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><description>字符集编码</description><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Tomcat编码Tomcat 的 conf/server.conf设置编码、设置为:<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"URIEncoding="UTF-8"redirectPort="8443" />添加:URIEncoding="UTF-8" 属性请求响应编码设置请求、响应编码//设置获取请求的编码request.setCharacterEncoding("utf-8")//设置服务器端的编码response.setCharacterEncoding("utf-8");//通知浏览器服务器发送的数据格式response.setContentType("text/html;charset=utf-8");字符串编码String oldStr = "编码设置";String newStr = new String(oldStr.getBytes(), "UTF-8");System.out.println("UTF-8编码:" + newStr);JDBC 连接指定编码url=jdbc:mysql://127.0.0.1/database?characterEncoding=UTF-8数据库设置编码编码可选:mysql> set character_set_client=utf8;mysql> set character_set_connection=utf8;mysql> set character_set_database=utf8;mysql> set character_set_results=utf8;mysql> set character_set_server=utf8;mysql> set character_set_system=utf8;mysql> set collation_connection=utf8;mysql> set collation_database=utf8;mysql> set collation_server=utf8;数据库表设置编码创建表的时候、指定编码:DEFAULT CHARSET=UTF8;CREATE TABLE `type` (`id` int(10) unsigned NOT NULL auto_increment,`type_name` varchar(50) character set utf8 NOT NULL default '', PRIMARY KEY (`id`)) DEFAULT CHARSET=UTF8;补充如果出现乱码现象、可对应⽂章修改。
10中文乱码问题

Java中文乱码问题的解决方案时间:2011-02-10 16:58:26来源:网络整理作者:未知点击:45次只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。
下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。
1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。
下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。
1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859-1,在Servlet/JSP程序中,通过请求对象的getParameter()方法得到的字符串是以ISO-8859-1转换而来,这是导致乱码产生的原因之一。
为了避免容器以ISO-8859-1的编码方式返回字符串,对于以POST方法提交的表单数据,可以在获取请求参数值之前,调用request.setCharacterEncoding("GBK"),明确指定请求正文使用的字符编码方式是GBK。
在向浏览器发送中文数据之前,调用response.setContentType ("text/html;charset=GBK"),指定输出内容的编码方式是GBK。
对于JSP页面,在获取请求参数值之前,写上下面的代码:<%request.setCharacterEncoding("GB2312");%>为了指定输出内容的编码格式,设置page指令contentType属性,如下:<%@ page contentType="text/html; charset=GBK" %>在Web容器转换JSP页面后的Servlet类中,会自动添加下面的代码:response.setContentType("text/html; charset=GBK");2.以GET方法提交的表单数据中有中文字符当提交表单采用GET方法时,提交的数据作为查询字符串被附加到URL的末端,发送到服务器,此时在服务器端调用setCharacterEncoding()方法也就没有作用了。
Java各种中文乱码问题的解决(1)get和post请求
作为java程序员,中文的乱码问题会经常碰到。
过去的一个项目,我碰到了各种类型的java乱码问题。
先分享给大家:1:网页Post请求,提交后,显示提交结果,乱码。
首先确定数据库的编码方式。
这里我发现,如果数据库的编码不是UTF-8,Post 请求也可以保证回显正确,但是有一个地方要注意。
如html中:(1)<input type="text" name="num" value="${person.num}"/>这时,value中的num中文会正常显示。
(2)<input type="text" name="num" value="<c:outvalue="${person.num}">"/>这时,value中的Num中文不会显示,显示乱码。
这是因为jstl标签库的原因。
虽然(1)代码可以显示中文,但仍然推荐数据库编码改成UTF-82:网页get请求,提交后,显示乱码。
这个问题就比较复杂了。
解决方法可以分为两步,(我们首先做了第一部,解决了大部分问题,第二步是解决特殊问题)。
我们难免使用get请求提交,如果其中有中文,那么:(1)Tomcat中:找到 server.xml 中的<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />以上方法是在网上找到的,我尝试了,起不到效果,但给了我们启发,我们如下做:URIEncoding="UTF-8"没想到成功了。
java中文乱码解决方法
java中文乱码解决方法1、解决文件中文乱码:1.1、修改文件字符编码:由于不同系统,比如Unix下用GBK格式编辑的文件,在Windows中就会乱码,此时可以使用Notepad++(记事本插件),将文件编码转换为系统默认的utf-8,8为Unicode编码。
1.2、修改系统语言及字符编码:此外,也可以通过改变操作系统的语言及字符编码,这种方法我们可以在控制面板-区域和语言的地方进行修改,再次点击其中的管理,在点击详细设置,这时候就可以看到字符集,将其设置为utf-8。
2、解决程序中文乱码:2.1、使用unicod-8格式编码:在这种情况下,一定要注意程序代码的编码格式,一定要以utf-8格式进行编码,而不是GBK,否则一样会出现乱码。
2.2、设置字符集:有时候,可以在程序中设置语言字符集,例如:response.setContentType("text/html;charset=utf-8");用于普通的JSP页面编码设置,也可以在web.xml中设置characterEncoding3、修改Tomcat的默认编码:可以修改tomcat的server.xml文件,将其默认编码为utf-8,在相应的位置加上URIEncoding="utf-8"。
4、前端乱码解决方法:也可以到浏览器中去修改编码,比如:Firefox浏览器中,可以按Ctrl + U,Chrome可以按Ctrl + U,IE下可以第一个菜单栏中点击View,然后选择Encoding,转换为相应的编码即可。
5、对数据库使用正确的编码:在不同的数据库中当我们有gbk的字符编码的时候,一定要创建数据库时候指定好字符编码,让数据库与整个程序保持一致,如果仅仅程序有编码时,数据库没有则容易出现乱码。
总之,我们在解决Java中文乱码的问题是要以系统- web页面-程序-数据库为关键点进行检查,以确保编码的一致性。
解决中文乱码的几种解决方法(推荐)
解决中⽂乱码的⼏种解决⽅法(推荐)⾸先说明我的特殊情况:1. 前台jsp中,我使⽤的是 form post 请求,设置了 enctype="multipart/form-data" ,页⾯编码格式都是utf-82. 后台中,我使⽤的是commons-fileUpload组件,ServletFileUpload 解析form表单和⽂件,3. 设置 request.setCharacterEncoding("UTF-8");4. 设置了ServletFileUpload .setHeaderEncoding("UTF-8");5.Tomcat 的配置下⾯ server.xml 也已经设置了 URIEncoding="UTF-8";⾄此,按道理所有的格式都匹配上了,前后对应,解析出来的肯定是utf-8,但是经过formfield解析出来后任然是ISO-8859-1格式的编码,enctype="multipart/form-data" 会将数据以2进制的编码格式传递,因此我断定是 ServletFileUpload 解析时出了问题,多番查找,我的问题缺少了⼀步String formFieldValue = fileItem.getString("UTF-8");JSP和Servlet的六种中⽂乱码处理⽅法⼀、表单提交时出现乱码:在进⾏表单提交的时候,经常提交⼀些中⽂,⾃然就避免不了出现中⽂乱码的情况,对于表单来说有两种提交⽅式:get和post提交⽅式。
所以请求的时候便有get请求和post请求。
每种⽅式都有着不同的解决⽅法,之所以出现乱码,原因就在于get 请求时,其传递给服务器的数据是附加在URL地址之后的;⽽post的请求时,其传递给服务器的数据是作为请求体的⼀部分传递给服务器。
如何解决Java中中文乱码问题
如何解决Java中的中文乱码问题?一、中文问题的来源计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。
随着计算机的开展,为了适应世界其它民族的语言〔当然包括我们的汉字〕,人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统〔多数时间是操作系统〕默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。
我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。
所以,大局部的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。
如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312根底上扩充来的。
1由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,那么显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行〔我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行〕。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解决Java中POST和GET请求的中文乱码问题
当我们通过表单向服务器提交数据时,数据的流向是:浏览器→服务器,服务器→浏览器,如果浏览器端和服务器端所采用的编码方式不一致,就会出现乱码问题。
输入时
POST请求
服务器端获取正常编码格式的字符串
1,首先确保表单所在的页面按照指定的字符集打开
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
2,在服务器端按照这个编码格式解码即可
request.setCharacterEncoding("utf-8");
GET请求
1,使用meta确保表单所在页面按照指定字符集打开
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
2,在服务器端使用如下方式获取参数
String userName = request.getParameter("username");
userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
输出时
POST请求和GET请求一样,都需要在输出对象调用输出方法之前调用setContentType(String content)方法
response.setContentType("text/html;charset=utf-8");
作用
1,通知容器,在调用out.println方法输出时,使用指定的字符集
2,生成消息头中content-type的值,通知浏览器,服务端返回的数据类型和字符集
注意
在JSP中,<%@page pageEncoding=”UTF-8”%> 该指令只是设置页面本身的编码,这是因为jsp文件与Servlet不同,jsp文件需要由容器来编译,所以需要为其指定编码。
取值时,需要设置指定编码。
<%@page contentType=”text/html;charset=UTF-8”%>
这句话相当于:response.setContentType("text/html;charset=utf-8");。