免费 java中文乱码字符集解决大全
Java中文乱码的终极解决方案
Java中文乱码的终极解决方案1. 解决HTML页面中的中文问题为了使HTML页面很好地支持中文,就必须在每个HTML页面的头部增加如下代码:<HEAD><META http-equiv="Content-Type“ content="text/html; charset=UTF-8"></HEAD>2. 解决JSP页面中的中文问题为了使JSP页面很好地支持中文,就必须在每个JSP页面的头部增加如下代码:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>3. 解决HTTP(get/post)请求中的中文问题在默认情况下,IE浏览器发“ISO-8859-1”的编码格式发送请求,如果接收到HTTP的get请求中文参数时出现乱码,可以采用以下方法:1)对其进行Java编码转换,例如:String fieldName = new String(request.getParameter("fieldName").getBytes("ISO-8859-1"),"UTF-8");2) 通过设置Web服务器的编码来解决:a. Tomcat - 修改server.xml文件<Connector port="8080"...URIEncoding="UTF-8"/> <!--增加这项-->b. Resin - 修改resin.conf文件--Resin2.x<host id=''><character-encoding>UTF-8</character-encoding>...</host>--Resin3.x<web-app-default><character-encoding>UTF-8</character-encoding></web-app-default>4. 解决页面数据传输的中文问题为了使中文数据在各页面(组件)之间正常传递,最佳的方法就是采用编码过滤器来解决。
JAVA WEB中中文乱码问题汇总
java web中中文乱码问题汇总1,jsp页面中文乱码解决办法:文件头部定义指定页面显示编码<%@page language="java"import="java.util.*"contentType="text/html;charset=GB2312"%>2,URL传递参数中文乱码解决方法:修改Tomcat服务器的配置文件Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下[html]<Connector port="8080"protocol="HTTP/1.1"URIEncoding="gb2312"3,提交表单的中文乱码解决方法:Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。
对于这个问题可以采用转换编码格式的方法来解决String param=request.getParameter("param");//获取参数out.println("中文参数:"+newString(param.getBytes("ISO-8859-1"),"gb2312");4,采用PrintWriter方式输出中文乱码解决方法:PrintWriter自身并没有处理编码的职责,它还是应该看成一个装饰器比较好:它就是为了输出更方便而设计的,提供print、println、printf等便利方法。
在servlet中输出中文,如果采用PrintWriter方式,需要在调用getPrintWriter()之前调用setContentType或者setCharacterEncodingresponse.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8");5,ajax中文乱码解决方法:ajax的中文问题已全部解决,从最初的jsp页面看过来,中文就是一个编码方式的问题,出现乱码的原因大部分是在错误的时间,错误的地点进行了编码的操作,且编码的类型一会儿GBK,一会儿GB2312,一会儿UTF-8,当然数据会乱掉了。
java页面中文乱码的解决办法
java页⾯中⽂乱码的解决办法在页⾯提交到tomcat乱码解决⽅法是在tomcat/conf/server.xml中进⾏配置以tomcat6.0.32为例,需将以下代码:Xml代码复制代码代码如下:<Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"/><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />改为:Xml代码复制代码代码如下:<Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8"/><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8" />如果tomcat前端有Apache或是Nginx转发,则还需将:Xml代码复制代码代码如下:<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />改为:Xml代码复制代码代码如下:<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"URIEncoding="UTF-8"/><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />中⽂url乱码在这⾥介绍⼀种解决⽅法,可以在任何应⽤部署环境下通⽤。
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;补充如果出现乱码现象、可对应⽂章修改。
JAVA中文字符乱码解决详解
JAVA中⽂字符乱码解决详解⾸先要了解JAVA处理字符的原理。
JAVA使⽤UNICODE来存储字符数据,处理字符时通常有三个步骤:– 按指定的字符编码形式,从源输⼊流中读取字符数据– 以UNICODE编码形式将字符数据存储在内存中– 按指定的字符编码形式,将字符数据编码并写⼊⽬的输出流中。
所以JAVA处理字符时总是经过了两次编码转换,⼀次是从指定编码转换为UNICODE编码,⼀次是从UNICODE编码转换为指定编码。
如果在读⼊时⽤错误的形式解码字符,则内存存储的是错误的UNICODE字符。
⽽从最初⽂件中读出的字符数据,到最终在屏幕终端显⽰这些字符,期间经过了应⽤程序的多次转换。
如果中间某次字符处理,⽤错误的编码⽅式解码了从输⼊流读取的字符数据,或⽤错误的编码⽅式将字符写⼊输出流,则下⼀个字符数据的接收者就会编解码出错,从⽽导致最终显⽰乱码。
这⼀点,是我们分析字符编码问题以及解决问题的指导思想。
好,现在我们开始⼀只只的解决这些乱码怪兽。
⼀、在JAVA⽂件中硬编码中⽂字符,在eclipse中运⾏,控制台输出了乱码。
例如,我们在JAVA⽂件中写⼊以下代码:String text = “⼤家好”;System.out.println(text);如果我们是在eclipse⾥编译运⾏,可能看到的结果是类似这样的乱码:。
那么,这是为什么呢?我们先来看看整个字符的转换过程。
1. 在eclipse窗⼝中输⼊中⽂字符,并保存成UTF-8的JAVA⽂件。
这⾥发⽣了多次字符编码转换。
不过因为我们相信eclipse的正确性,所以我们不⽤分析其中的过程,只需要相信保存下的JAVA⽂件确实是UTF-8格式。
2. 在eclipse中编译运⾏此JAVA⽂件。
这⾥有必要详细分析⼀下编译和运⾏时的字符编码转换。
– 编译:我们⽤javac编译JAVA⽂件时,javac不会智能到猜出你所要编译的⽂件是什么编码类型的,所以它需要指定读取⽂件所⽤的编码类型。
Java中文乱码的解决方案
Java中文乱码的解决方案jsp+Servlet的形式,在jsp页面向后台发送的请求里包含中文时,后台采用String name = request.getParameter("name")接收到的是乱码,我在网上找了很多资料,有网友说request.getParameter是默认采用ISO8859-1来编码的,必须进行转换:我总结了一下,解决中文乱码大概有以下几种方式:1、采用decode()方法.URLDecoder.decode(s)2、采用设置字符集的方式request.setCharacterEncoding("utf-8");3、在页面上定义charset的字符集<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8">4、在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8<filter><filter-name>encodingFilter</filter-name><filter-class>com.demo.filter.CoreFilter</filter-class><init-param><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>5、在form表单里定义编码accept-charset="utf-8" onsubmit="document.charset='utf-8';"6、更改ContentTypes的值改变myeclipse里ContentTypes的值为utf-87、改变tomcat字符集通过改变server.xml文件里的字符集来接收中文8、采用转码的方式nameCode = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");补充:如果是Servlet向页面发送的数据中包含中文,可以采用如下方式解决:response.setContentType("text/html;charset=utf-8");。
java中文乱码解决方法
java中文乱码解决方法Java是一种强大的编程语言,它可以为不同的计算机平台提供稳定可靠的软件开发环境,它也在处理文本文件上有着独特的优势。
但在使用Java处理中文文件时,乱码就成为了一个重大问题,如果不能很好地处理乱码,会影响到Java应用软件的正常使用。
本文给出了3种常用的Java中文乱码解决方案,以帮助相关开发人员快速解决乱码问题。
首先,使用正确的字符集编码将文件保存为指定的编码格式,这可以有效防止中文乱码的出现。
首先,应确保将文本文件保存为国际标准字符集UNIX UTF-8编码。
这是一种任何平台及系统都能够正确执行的字符集,比如Windows系统可以使用ANSI编码,但是在Linux 中会出现乱码问题。
其次,在字符编码方面应尽量使用UTF-8,它可以支持多种字符集,可以为用户提供更丰富的文本文件内容。
此外,为了完全解决Java中文乱码问题,开发者可以利用相关的API来设置不同的编码格式。
例如,开发者可以使用System.setProperty()方法来指定程序的编码格式,即指定文件使用的字符集。
以下是一个简单的示例代码:System.setProperty(file.encoding UTF-8另外,Java还提供了更加强大的控制功能。
它可以为用户提供一种可以自行设置和识别字符集的文件编码类。
例如,使用InputStreamReader和OutputStreamWriter类,开发者可以指定输入和输出的字符集,以进行不同的输入和输出操作,从而得到更加准确的结果,避免出现乱码问题。
以下是一个使用InputStreamReader 和OutputStreamWriter设置字符集的简单示例:InputStreamReader isr = new InputStreamReader(inputStream, UTF-8OutputStreamWriter osw = newOutputStreamWriter(outputStream, UTF-8最后,用户还可以使用相关的第三方软件来解决Java中文乱码问题,这些软件专门设计用于解决文本文件字符集编码的问题,可以自动识别文件的编码格式,并将其转换成指定的编码格式。
java中解决中文乱码和介绍一个上传工具
●在web开发中的中文乱码问题解决方案1、字符集分为:请求字符集和响应字符集2、对于请求字符集处理解决方案,一般我们所使用的中文字符集为gbk,gb2312,big5等等,而国际化或基于web2.0之后,我们选择utf-8作为字符集。
所以要进行字符集的转化问题:●根据请求解析某一个请求参数名所对应值的中文问题:(1)将字符串转为字节数组,并将其字符集转换为标准ISO-8859-1,代码:String ntname = request.getParameter(“name”);//接收内容///字符集进行转换byte[] ntname = ntname.getBytes(“ISO-8859-1”);//将字符集ISO-8859-1转换为字节数组(2)将字节数组再转换为字符串,并将其字符集设置为UTF-8。
代码:String newNtname = new String(ntname,utf-8”); //将字节数组变成字符串,同时指定转换的编码为utf-8.(2)设置当前请求字符集解决中文乱码的问题:使用:HttpServletRequest对象中方法setCharacterEncoding("UTF-8");代码:request.setCharacterEncoding(“utf-8”);核心提示:此种解决方案仅适合于post请求,而get请求无法解决(3) 通过设置过滤器型servlet,解决所有请求字符集的过滤A、建立过滤型servlet。
步骤:a、创建实现filter接口类,并且覆写3个方法,比如代码:MyFilter implements Filter{public void init(FilterConfig config) throws ServletException{}public void doFilter(ServletRequest request , ServletResponse response , FilterChain chain) throws ServletException,IOException {}public void destroy(){}}b、配置web.xml文件,配置过滤型servlet。
java中文字符乱码问题汇总
1. 开发环境乱码 -- eclipse或ant编译乱码将java系统默认的字符集cp1253 改成GBK 修改控制面板--区域与语言否则在用ant运行java程序的时候会出现编码的错误原因是java 在运行时会调用系统的默认配置文件System.getProperties();其中有个file.encoding 的属性决定编码集,如果是英文版的操作系统则file.encoding=CP1253所以ant 运行中文程序会乱码如果不想修改系统默认字符集的话,可以再ant java target中加入下面语句<javac srcdir="${project.src}"destdir="${project.output.build}"debug="on" encoding="UTF-8"deprecation="on"listfiles="on"includeAntRuntime="no"><compilerarg value="-Xlint:all"/><classpath refid="project.classpath"/><classpath refid="tomcat.classpath"/></javac><java classpathref="project.classpath" classname="com.mose.ParserEnglish" fork="true" failonerror="true"> <sysproperty key="file.encoding" value="UTF-8"/><arg value="-h"/></java>2. web开发乱码2.1 解决响应中的乱码何为响应中的乱码?把页面中的“username”改成“用户名”你就知道了。
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页面-程序-数据库为关键点进行检查,以确保编码的一致性。
【免费下载】Java乱码问题解决方案
Java乱码问题解决方案.txt生活是一张千疮百孔的网,它把所有激情的水都漏光了。
寂寞就是你说话时没人在听,有人在听时你却没话说了!Java乱码问题解决方案Java乱码问题一直是困扰初学者的一个难题,下面就根据笔者的经验来给大家一个解决方案。
我写了一个Demo的web应用,解决了乱码问题,点击下载1 问题来源Java的乱码问题,根源在于操作系统、数据库(MySQL)、Web服务器(Tomcat)、页面(JSP)中的编码不一致造成的。
例如,mysql的编码是latin1,而页面上字符的编码是GBK,则就会出现乱码问题。
2 解决方案了解了乱码产生的原因,下面就来看一下如何解决乱码。
事实上,只要保证各个环节的编码一致,就不会产生乱码,所以只要将所有的环节,设置的编码为UTF-8,就不会出现乱码了(为了支持国际化,建议统一设置成UTF-8)。
3 mysql数据库编码的设置(以MySQL 5.0.41为例)查看数据库支持的编码:show character set;这样可以查看mysql数据库支持的所有编码,其中可以看到有支持utf8编码。
mysql> show character set ;+----------+-----------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+-----------------------------+---------------------+--------+| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 || dec8 | DEC West European | dec8_swedish_ci | 1 || cp850 | DOS West European | cp850_general_ci | 1 || hp8 | HP West European | hp8_english_ci | 1 || koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 || latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 || ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | cp866 | DOS Russian | cp866_general_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 || macroman | Mac West European | macroman_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | binary | Binary pseudo charset | binary | 1 | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | +----------+-----------------------------+---------------------+--------+ 36 rows in set (0.00 sec)查看数据库默认的编码: show variables like '%character%'; mysql> show variables like '%character%';+--------------------------+---------------------------------------+| Variable_name | Value |+--------------------------+---------------------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | E:\mysql-5.0.41-win32\share\charsets\ |+--------------------------+---------------------------------------+8 rows in set (0.00 sec)可以看到,mysql数据库中,此时有关字符串的设置的参数,其中“character_set_server”为创建数据库是默认的编码,现在需要将其修改为utf8。
Java中文乱码字符集解决大全-
Java中⽂乱码字符集解决⼤全-转⾃:Abstract:本⽂深⼊分析了Java程序设计中Java编译器对java源⽂件和JVM对class类⽂件的编码/解码过程,通过此过程的解析透视出了Java编程中中⽂问题产⽣的根本原因,最后给出了建议的最优化的解决Java中⽂问题的⽅法。
1、中⽂问题的来源计算机最初的操作系统⽀持的编码是单字节的字符编码,于是,在计算机中⼀切处理程序最初都是以单字节编码的英⽂为准进⾏处理。
随着计算机的发展,为了适应世界其它民族的语⾔(当然包括我们的汉字),⼈们提出了UNICODE编码,它采⽤双字节编码,兼容英⽂字符和其它民族的双字节字符编码,所以,⽬前,⼤多数国际性的软件内部均采⽤UNICODE编码,在软件运⾏时,它获得本地⽀持系统(多数时间是操作系统)默认⽀持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认⽀持的格式显⽰出来。
Java的JDK和JVM即是如此,我这⾥说的JDK是指国际版的JDK,我们⼤多数程序员使⽤的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。
我们的汉字是双字节编码语⾔,为了能让计算机处理中⽂,我们⾃⼰制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。
所以,⼤部分的操作系统为了适应我们处理中⽂的需求,均定制有中⽂操作系统,它们采⽤的是GBK,GB2312编码格式以正确显⽰我们的汉字。
如:中⽂Win2K默认采⽤的是GBK编码显⽰,在中⽂WIN2k中保存⽂件时默认采⽤的保存⽂件的编码格式也是GBK的,即,所有在中⽂WIN2K中保存的⽂件它的内部编码默认均采⽤GBK编码,注意:GBK是在GB2312基础上扩充来的。
由于Java语⾔内部采⽤UNICODE编码(表现为编译⽣成的.class⽂件和加载进内存中的class字节码是UNICODE编码,⽽不是Java源⽂件为UNICODE编码,Java源⽂件可以为任意的编码类型),所以在JAVA程序运⾏时,就存在着⼀个从UNICODE编码和对应的操作系统及浏览器⽀持的编码格式转换输⼊、输出的问题,这个转换过程有着⼀系列的步骤,如果其中任何⼀步出错,则显⽰出来的汉字就会出是乱码,这就是我们常见的JAVA中⽂问题。
Java中文乱码解决办法
中文乱码解决办法
保持字符集统一,在此采用统一字符集“UTF-8”
1.新建web工程时采用统一的编码格式
1.1工程更改编码格式
右击“工程名”
设置编码为
“UTF-8”
1.2文件更改编码
右击“文件名”
2jsp
文件中更改编码
3.servlet 中处理中文乱码的问题
3.1doPost 方法中处理乱码问题
3.1.1在获取页面数据之前设置编码
设置编码为
“UTF-8”
3.1.2打开传输流之前设置编码
3.2doGet方法中处理乱码问题
3.2.1在获取页面数据之前设置编码
3.2.2打开传输流之前设置编码
3.2.3更改Tomcat配置文件
Tomcat安装目录下----》conf文件夹下--》server.xml中----》
4数据库乱码问题解决<MySql为例>
MySql安装目录----------》my.ini---------------》
以上解决办法仅供参考......。
java开发乱码问题处理大全
2.JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("UTF-8") 。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=UTF-8")。
JSP页面乱码通常只要在页面开始地方用上面代码指定字符集编码即可。如果还不行,那么请用下面这句话来转换 str=new String(str.getBytes("ISO-8859-1"),"页面编码方式");
A.为WebService服务也加上一个filter,WebService也是走HTTP协议的,这个东西同样有用,先得加上。
B.修改服务器上的环境变量,LANG=zh_CN.UTF-8,改成这个是为什么我仍然说的不是很清楚,不过当时开发人员就是在Win下开发的,我在自己的Ubuntu上测试没问题,拿到Redhat服务器上就不行,因为服务器上默认的是LANG=en_US.UTF-8,这个明显是不支持汉字的。
有点扯远了,不过少用GET,是会有回报滴。
4.JavaScript和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在URL里面使用中文,实在避免不了,就只能在生成链接的时候转码,绝对不能想当然的认为SetCharacterEncodingFilter会帮你做什么事情。
Java的各种中文乱码解决方法
Java的各种中⽂乱码解决⽅法⼀、Servlet输出乱码1. ⽤servlet.getOutStream字节流输出中⽂,假设要输出的是String str ="钓鱼岛是中国的,⽆耻才是⽇本的"。
1.1 若是本地服务器与本地客户端这种就不⽤说了,直接可以out.write(str.getBytes())可以输出没有问题。
因为服务器中⽤str.getBytes()是采⽤默认本地的编码,⽐如GBK。
⽽浏览器也解析时也⽤本地默认编码,两者是统⼀的,所以没有问题。
1.1 若服务器输出时⽤了, out.write(str.getBytes("utf-8"))。
⽽本地默认编码是GBK时(⽐例在中国),那么⽤浏览器打开时就会乱码。
因为服务器发送过来的是utf-8的1010数据,⽽客户端浏览器⽤了gbk来解码,两者编码不统⼀,肯定是乱码。
当然,你也可以⾃⼰将客户端浏览器的编码⼿⼯调⽤下(IE菜单是:查询View->编码encoding->utf-8),但是这种操作很烂,最好由服务器输出响应头告诉,浏览器⽤哪种编码来解码。
所以要在服务器的servlet中,增加response.setHeader("content-type","text/html;charset=utf-8"),当然也可直接⽤简单的response.setContentType("text/hmtl;charset=utf-8")。
两种的操作是⼀样⼀样的。
2. ⽤servlet.getWirter字符流输出中⽂,假设要输出的是String str ="钓鱼岛是中国的,⽆耻才是⽇本的"。
2.1 若写成out.print(str)输出时,客户端浏览器显⽰的将全是多个的字符,代表在编码表中肯定就找不到相应的字符来显⽰。
原因是:servlet.getWriter()得到的字符输出流,默认对字符的输出是采⽤ISO-8859-1,⽽ISO-8859-1肯定是不⽀持中⽂的。
java中文乱码终极解决方案
java中⽂乱码终极解决⽅案中⽂乱码终极解决⽅案乱码问题好像跟我们中国程序员特别有缘,⼀直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,⽆⼀不是搞得许多程序员焦头烂额的,整天骂XXX产品对中⽂⽀持不了,UTF-8⽆法使⽤中⽂啊什么的,其实这⾥⾯被骂的产品中其实99%以上是对中⽂⽀持⾮常好的,⽽出现乱码的原因只是因为⾃⾝对国际化⽀持以及⽂件编码等信息的认识不知造成的。
要知道⼀个产品那么流⾏,怎么可能对中⽂⽀持不了呢,下⾯就开始⼀⼀帮⼤家解决这些问题。
1 、编码--想要解决好中⽂问题,对编码肯定是不能⼀概不懂了,编码是解决中⽂乱码问题的根本。
编码⽐较常⽤的有: UTF-8 , GBK , GB2312 , ISO-8859-1 ,除了 iso-8859-1 之外的其它三个编码都能很好的⽀持中⽂,但它们都兼容 ISO-8859-1 的编码(就是说⽆论编码怎么改变,只要是 ISO-8859-1 中的字符,永远不会出现乱码)。
这四种编码中, GB2312 是中国规定的汉字编码,也可以说是简体中⽂的字符集编码 ; GBK 是 GB2312 的扩展 , 除了兼容GB2312 外,它还能显⽰繁体中⽂,还有⽇⽂的假名 ; ⽽ UTF-8 虽然也⽀持中⽂,但却与 GB 码不兼容(编码值不同)。
UTF-8 使⽤的是可变长的 UNICODE 编码,编码可能是 1 位 16 进制(即 ISO-8859-1 中的字符,其编码也是相同的)也有可能是 2 位或 3 位的 16 进制。
UTF-8 的优点是:1 、与 CPU 字节顺序⽆关 , 可以在不同平台之间交流。
2 、容错能⼒⾼ , 任何⼀个字节损坏后 , 最多只会导致⼀个编码码位损失 , 不会链锁错误 ( 如 GB 码错⼀个字节就会整⾏乱码 ) ,所以在国际化处理中基本都是建议使⽤ UTF-8 作为编码。
2、⽂件的编码--虽然说只要设置了正确的编码就可以使字符正确显⽰了,但如果忽略了⽂件保存时的编码的话,那可是会让你⾛进迷雾中的。
Java中文乱码处理
Java中文乱码处理方法一1.保证所有的jsp页面的编码一致<%@ page language="java" import="" pageEncoding="GB18030"%>在MyEclipse中修改页面的默认编码的方法:Windows -> Perferences -> MyEclipse Enterprose Workbench->Files and Editors -> Jsp在右边的窗体中的E ncoding下拉列表选择Chinese,National Standard或者选择UTF-8的编码.如下图所示:方法二若使用的是struts2框架,则在web.xml中加入以下内容,且必须加在过滤器之前: <!-- 一定要放在struts2过滤器前--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>除此之外,还需要加入spring包.方法三在数据库的连接字符串后加入以下字符串:mysql驱动:jdbc:mysql://localhost/DataBase?useUnicode=true&characterEncoding=GBK 或jdbc:mysql://localhost/DataBase?useUnicode=true&characterEncoding=UTF-8具体视情况而定方法四在Tomcat的配置文件中修改编码:apache-tomcat-6.0.32\conf\ server.xml找到<Connector port="8083" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />修改成如下:<Connector port="8083" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEconding="GBK"/>保存并重启Tomcat。
Java应用中汉字显示成方块(方格)乱码的几种解决方法[教育]
Java 应用中汉字显示成方块(方格)乱码的几种解决方法Java 应用中汉字显示成方块(方格)乱码的几种解决方法1.在 jre/lib/fonts/ 下建立个目录 fallbackmkdir /usr/lib/jvm/java-1.5.0-sun/jre/lib/fonts/fallback/2.在 fallback 里弄个中文字体拷贝或链接都可以ln -s /usr/share/fonts/truetype/arphic/uming.ttf/usr/lib/jvm/java-1.5.0-sun/jre/lib/fonts/fallback/3.进入 jre/lib/fonts/fallback/ 执行 mkfontscale再把 jre/lib/fonts/fallback/fonts.scale 的内容加到jre/lib/fonts/fonts.dircd /usr/lib/j2sdk1.5-sun/jre/lib/fonts/fallback/mkfontscalecd ..cat fallback/fonts.scale >> fonts.dir-----------------------------------------------------------Jinitiator控件IE崩溃及Jinitiator界面汉字方框的解决办法前几天拿到的一套网络销售系统原来还有个类似ERP的管理后台,折腾了半天才架设起来并找到入口,类似http://IP:7778/forms/frmservlet?config=webutil&form=main,初步了解了下,好像是用Oracle Form builder开发的。
在原来就安装好Jinitiator控件的一台服务器上(Windwos Server 2003操作系统)用IE打开这个网址,然后会弹出个类似JVM的界面,但界面上的汉字都是乱码的,就是显示成黑色线的方框。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java中文解决大全Abstract:本文深入分析了Java程序设计中Java编译器对java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。
1.中文问题的来源计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。
随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。
我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。
所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。
如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312基础上扩充来的。
由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行)。
这种移植操作也会带来中文问题。
还有,有人使用英文的操作系统和英文的IE等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。
几乎所有的浏览器默认在传递参数时都是以UTF-8编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。
总之,以上几个方面是JAVA中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作:JAVA中文问题。
2.JAVA编码转换的详细过程我们常见的JAVA程序包括以下类别:*直接在console上运行的类(包括可视化界面的类)*JSP代码类(注:JSP是Servlets类的变型)*Servelets类*EJB类*其它不可以直接运行的支持类这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。
无论这些JAVA类的作用如何,这些JAVA程序的生命周期都是这样的:*编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k中用记事本编辑一个java源程序;*编程人员用JDK中的javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编译的);*直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。
那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢?这里,我们以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。
第一步,我们在中文win2k中用编辑软件如记事本编写一个Java源程序文件(包括以上五类JAVA程序),程序文件在保存时默认采用了操作系统默认支持GBK编码格式(操作系统默认支持的格式为file.encoding格式)形成了一个.java文件,也即,java程序在被编译前,我们的JAVA源程序文件是采用操作系统默认支持的file.encoding编码格式保存的,java源程序中含有中文信息字符和英文程序代码;要查看系统的file.encoding参数,可以用以下代码:public class ShowSystemDefaultEncoding {public static void main(String[] args) {String encoding = System.getProperty("file.encoding");System.out.println(encoding);}}第二步,我们用JDK的javac.exe文件编译我们的Java源程序,由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。
然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。
对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。
这一步中,对于JSP源程序文件是不同的,对于JSP,这个过程是这样的:即WEB容器调用JSP编译器,JSP编译器先查看JSP文件中是否设置有文件编码格式,如果JSP文件中没有设置JSP文件的编码格式,则JSP编译器调用JDK先把JSP文件用JVM默认的字符编码格式(也即WEB容器所在的操作系统的默认的file.encoding)转化为临时的Servlet类,然后再把它编译成UNICODE格式的class类,并保存在临时文件夹中。
如:在中文win2k上,WEB容器就把JSP文件从GBK编码格式转化为UNICODE格式,然后编译成临时保存的Servlet类,以响应用户的请求。
第三步,运行第二步编译出来的类,分为三种情况:A、直接在console上运行的类B、 EJB类和不可以直接运行的支持类(如JavaBean类)C、 JSP代码和Servlet类D、 JAVA程序和数据库之间下面我们分这四种情况来看。
a)直接在console上运行的类这种情况,运行该类首先需要JVM支持,即操作系统中必须安装有JRE。
运行过程是这样的:首先java 启动JVM,此时JVM读出操作系统中保存的class文件并把内容读入内存中,此时内存中为UNICODE格式的class类,然后JVM运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存(用户可以设置输入流的编码格式)。
程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后JRE把此字符串再转化为file.encoding格式(用户可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。
对于这种直接在console上运行的类,它的转化过程可用图1更加明确的表示出来:图1以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。
b)EJB类和不可以直接运行的支持类(如JavaBean类)由于EJB类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是UNICODE编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。
这种EJB类和不可以直接运行的支持类, 它的转化过程可用图2更加明确的表示出来:图2c)JSP代码和Servlet类经过第二步后,JSP文件也被转化为Servlets类文件,只不过它不像标准的Servlets一校存在于classes 目录中,它存在于WEB容器的临时目录中,故这一步中我们也把它做为Servlets来看。
对于Servlets,客户端请求它时,WEB容器调用它的JVM来运行Servlet,首先,JVM把Servlet的class 类从系统中读出并装入内存中,内存中是以UNICODE编码的Servlet类的代码,然后JVM在内存中运行该Servlet类,如果Servlet在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和URL中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则WEB容器会默认采用ISO-8859-1编码格式来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中。
Servlet运行后生成输出,输出的字符串是UNICODE格式的,紧接着,容器将Servlet运行产生的UNICODE格式的串(如html语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按ISO-8859-1编码发送到客户的浏览器上。
这种JSP代码和Servlet类,它的转化过程可用图3更加明确地表示出来:图3d)Java程序和数据库之间对于几乎所有数据库的JDBC驱动程序,默认的在JAVA程序和数据库之间传递数据都是以ISO-8859-1为默认编码格式的,所以,我们的程序在向数据库内存储包含中文的数据时,JDBC首先是把程序内部的UNICODE编码格式的数据转化为ISO-8859-1的格式,然后传递到数据库中,在数据库保存数据时,它默认即以ISO-8859-1保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。
对于JAVA程序和数据库之间的数据传递,我们可以用图4清晰地表示出来图43.分析常见的JAVA中文问题几个必须清楚的原则首先,经过上面的详细分析,我们可以清晰地看到,任何JAVA程序的生命期中,其编码转换的关键过程是在于:最初编译成class文件的转码和最终向用户输出的转码过程。