jsp中文乱码问题的解决方法,jsp运行结果乱码
三。数据库连接
在JSP开发的过程中,经常会出现中文乱码,甚至可能会困扰到你。现在,我将在JSP开发中遇到它们。
中文乱码问题及解决方法写出来供大家参考。
首先,JSP页面显示乱码
以下显示页面(display.jsp)出现乱码:
超文本标记语言
头
标题JSP /title的中文处理
meta http-equiv= Content-Type Content= text/html; charset=gb2312
/头
身体
%
out . print(“JSP的中文处理”);
%
/body
/html
对于不同的WEB服务器和不同的JDK版本,处理结果是不同的。原因:服务器使用的编码方式与浏览器不同。
这是由不同字符的不同显示结果造成的。解决方法:在JSP页面中指定编码方式(gb2312),也就是在页面顶部。
添加:% @ page content type= text/html;Charset=gb2312%,可以消除乱码。完整的页面如下
:
%@页content type= text/html;charset=gb2312%
超文本标记语言
头
标题JSP /title的中文处理
meta http-equiv= Content-Type Content= text/html; charset=gb2312
/头
身体
%
out . print(“JSP的中文处理”);
%
/body
/html
第二,当提交给中文时,表格出现乱码。
以下是包含以下代码的提交页面(submit.jsp):
超文本标记语言
头
标题JSP /title的中文处理
meta http-equiv= Content-Type Content= text/html; charset=gb2312
/头
身体
表单名称=form1 方法=post 操作=process.jsp
div align=center
输入类型=文本名称=名称
输入类型=提交名称=提交值=提交
/div
/表单
/body
/html
以下是处理页面的代码(process.jsp):
%@页content type= text/html;charset=gb2312%
超文本标记语言
头
标题JSP /title的中文处理
meta http-equiv= Content-Type Content= text/html; charset=gb2312
/头
身体
%=request . getparameter( name )%
/body
/html
如果submit.jsp提交的英文字符可以正确显示,提交中文字符时会出现乱码。原因:浏览器默认使用UTF。
-8编码方法来发送请求,而UTF- 8编码方法和GB2312编码方法在表示字符时是不同的,因此会出现无法识别的字符。
解决方案:通过请求对请求进行统一编码。sec character encoding( GB 2312 ),实现了中文的规范化。
展示。修改后的process.jsp电码如下:
%@页content type= text/html;charset=gb2312%
%
request . secharactercencoding( GB 2312 );
%
超文本标记语言
头
标题JSP /title的中文处理
meta http-equiv= Content-Type Content= text/html; charset=gb2312
/头
身体
%=request . getparameter( name )%
/body
/html
第三,数据库连接混乱。
只要所有涉及中文的地方都是乱码,解决方法:在数据库的数据库URL中添加
Unicode=真字符编码=gbk就可以了。
数据库显示乱码。
在mysql4.1.0中,中文乱码会以varchar类型和text类型出现。对于varchar类型,设置为二进制属性即可。
它可以解决中国的问题。对于文本类型,需要使用代码转换类来处理。实现如下:
公共类转换{
/* *将ISO-8859-1代码转换为GB2312
*/
公共静态字符串ISOtoGB(字符串iso){
字符串GB;
尝试{
if(iso . equals() iso==null){
返回“”;
}
否则{
iso=iso . trim();
gb=新字符串(iso.getBytes(ISO-8859-1 ), GB 2312 );
返回GB;
}
}
捕捉(异常e){
System.err.print(编码转换错误: e . getmessage());
返回“”;
}
}
}
编译成类,就可以调用Convert类的静态方法ISOtoGB()来转换代码。
如果你不懂别的:我推荐一个不错的JSP-JAVA网站:
http://www.phy.hbnu.edu.cn/dsp/
总结:
1.%@页content type= text/html in JSP;Charset=A%如果指定,jsp中的所有构造都将被更改。
的字符串(不是引用),如果没有指定编码,则这些字符串的编码是。
如果从请求中获得的字符串没有指定请求的编码,则它是iso-8859-1
从其他地方获得的字符串是原始编码的,例如,从数据库获得的字符串,如果数据库的编码
B,那么字符串的编码是B而不是A,也不是系统默认的。
此时,如果要输出的字符串的代码不是A,很可能会显示乱码,所以首先要正确转换字符串。
编码一个字符串,然后输出。
2.%@页content type= text/html in JSP;未指定charset=A“% 1 ”,因此它等同于指定% @
page content type= text/html;charset=ISO-8859-1 %
3.如果像response . setcontenttype( text/html;charset=A );解释响应的
输出流的代码设置为A,所有要输出的字符串的代码都要转换为A的,否则会得到乱码。
Servelet中从请求中获取的字符串的编码和jsp中的编码是一样的,只是构造在servlet java文件中。
默认系统对字符串进行编码。在servelt中从外部获得的字符串由原始代码编码,比如从代码。
从代码为B的数据库中获得的数据被编码为B,而不是A,也不是系统的默认代码。
//////////////////////////////////////////////////////////////////////////////////////////
转载:中文乱码JSP解决方案总结
在使用JSP的过程中,最让人头疼的一个问题就是中文乱码。以下是我在软件开发中遇到的困惑。
问题和解决方案。
1.JSP页面乱码。
出现这种乱码的原因是页面中没有指定的字符集应该进行编码。解决方法:只需在页面的开头使用它。
面码指定了字符集编码,
2.数据库乱码
这种乱码会让你插入数据库的中文出现乱码,或者在阅读和显示时出现乱码。解决方案如下:
将编码字符集添加到数据库连接字符串。
string Url= JDBC:MySQL://localhost/digit gulf?
user=root password=root use unicode=true character encoding=GB 2312 ;
并在页面中使用以下代码:
response . set content type( text/html;charset=GB 2312’);
request . setcharacterencoding( GB 2312 );
3.中文作为参数传输乱码。
当我们将一个汉字作为参数传递给另一个页面时,也会出现乱码。解决方案如下:
传递参数时对参数进行编码,例如
RearshRes.jsp?keywords= Java . net . URL encoder . encode(关键字)
然后使用下面的语句在接收参数页中接收。
keywords=新字符串(request.getParameter(keywords )。getBytes( 8859 _ 1 );
4.JSP页面被这句话弄得乱码。
%@页content type= text/html;charset=GB 2312 language= Java import= Java . SQL . *
errorPage=err.jsp %
/////////////////////////////////////////////////////////////////////////////////////////
JSP/JDBC MySQL乱码问题~ ~ ~
作者:匿名来源:本站整理发布时间:2005年7月1日12: 24: 30
绿色:
JSP的请求默认是ISO8859_1,所以在处理中文的时候
要显示中文,必须将其转换为GBK,如下所示
String str=新字符串(request.getParameter(name )。getBytes( GBK ), ISO8859-1 );
out . println(str);
以便显示中文。
MYSQL运营中的中文问题:
这个取决于MySQL的默认代码。一般不调整的话就是latin1,其实和ISO8859_1一样,所以操作的时候要处理。
同意他,不然就是乱码。
1.插入中文:
string SQL 2= INSERT INTO test(name)VALUES( request . getparameter( name ) );
stmt . execute update(SQL 2);
不用编码就可以插入。
2.显示插入的中文:
因为它是用拉丁文存储的,所以显示时需要GBK。
String x=新字符串((rs.getString(title ))。getBytes( GBK _ 1 ), ISO8859 );
out . println(x);
3.设置存储代码:
当然,MySQL编码latin1的时候,保存的时候也可以用GBK。
connection con=driver manager . getconnection( JDBC:MySQL://localhost:3306/JSP?
use unicode=true character encoding=GBK , root , );
1 str1=中文;
string SQL 2= INSERT INTO test(name)VALUES( str 1 );
也能插成功,呵呵。
////////////////////////////////////////////////////////////////////////////////////////
JSP/Servlet中的汉字编码
(作者:张建芳,转自IBM DeveloperWorks中国网站2001年4月18日15:08)
网上有很多关于JSP/Servlet中DBCS字符编码的优秀文章和讨论。本文将对它们进行分类,
结合IBM WebSphere Application Server 3.5(WAS)的解决方案,希望不是多余的。
1.问题的根源
每个国家(或地区)都规定了计算机信息交换的字符编码集,如美国的ASCII和中国的GB2312。
-80,日本的JIS等。作为本国家/地区信息处理的基础,在统一编码中发挥重要作用。字符编码集印刷机
长度可以分为两类:SBCS(单字节字符集)和DBCS(双字节字符集)。早期的软件(尤其是操作系统),
为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N)。为了区分,郎,
代码页其他概念。但是,由于每个本地字符集的代码范围重叠,相互之间很难交换信息。软件的每个本地化版本
这种独立维护成本很高。因此,需要提取本土化中的共性,做出一致的处理,对待特殊的本土化。
把内容减到最少。这叫做国际化(I18N)。各种语言信息被进一步标准化为地区信息。处理
的基础字符集变成了Unicode,它包含了几乎所有的字形。
目前,大多数具有国际特色的软件的核心字符处理是基于Unicode的,当软件运行时,它是基于
当设置了Locale/Lang/Codepage时,将确定相应的本地字符编码设置,并相应地处理本地字符。在治疗过程中
需要实现Unicode和本地字符集之间的相互转换,甚至是以Unicode为中间的两个不同本地字符集之间的相互转换。
改变。这种方式在网络环境中进一步扩展,网络两端的任何字符信息也需要根据字符集的设置转换成字符集。
接受的内容。
在Java中,字符由Unicode表示,它符合Unicode V2.0 Java程序从/到文件系统的要求
在字符流中读写文件,向URL连接写入HTML信息,或者从URL连接读取参数值都会有字符编码。
转换。虽然这样增加了编程的复杂度,容易导致混乱,但是符合国际化的思路。
理论上,这些基于字符集设置的字符转换应该不会造成太多问题。事实是,由于申请过程
序列的实际运行环境不同,Unicode和各个本地字符集的补充和完善,系统或应用程序的非标准实现。
转码中的问题一直困扰着程序员和用户。
2.GB2312-80,GBK,GB18030-2000中文字符集
其实解决JAVA程序中汉字编码问题的方法往往很简单,但还是要了解背后的原因和定位问题。
了解现有的汉字编码和编码转换。
GB2312-80是在我国中文计算机信息技术发展初期制定的,包含了最常用的I级和II级。
汉字和9区的符号。这个字符集是几乎所有中文系统和国际软件都支持的中文字符集,也是
最基本的中文字符集。编码范围为高位0xa1-0xfe,低位0xa1-0xfe。汉字以0xb0a1开头,以0xb0a 1结尾。
在0x F7 Fe;
GBK是GB2312-80的扩展,向上兼容。它包含20902个汉字,编码范围是0x8140-
0xfefe,消除高0x80字位。它的所有字符都可以一对一地映射到Unicode 2.0,这意味着JAVA实际上
支持GBK字符集。这是目前Windows和其他一些中文操作系统的默认字符集,其实不是。
所有的国际化软件,都支持这个字符集,感觉不知道GBK是怎么回事。值得注意的是,它不是
国家标准,而不仅仅是规范。随着GB18030-2000的发布,它将在不久的将来完成自己的历史使命。
GB18030-2000(GBK2K)在GBK的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。
GBK2K从根本上解决了字位和字形不足的问题。它有几个特点:
并不确定所有字形,只是为后期扩展指定编码范围。
代码长度可变,其双字节部分兼容
字节0x81-0xfe,两个字节0x30-0x39,三个字节0x81-0xfe和四个字节0x30-0x39。
其推广是阶段性的。第一个要求是实现所有可以完全映射到Unicode 3.0标准的字形。
是国家标准,强制性的。
目前还没有一个操作系统或者软件实现了对GBK2K的支持,这是目前和未来国产化的工作内容。
3.JSP/Servlet汉字编码问题及其在WAS中的解决
3.1常见的编码问题现象
互联网上常见的JSP/Servlet编码问题一般表现在浏览器或应用端,比如:
为什么Jsp/Servlet页面中的中文字符在浏览器中都可以看到??
为什么浏览器中看到的Servlet页面中的汉字都是乱码?
怎么JAVA应用界面的所有汉字都变成了方块?
Jsp/Servlet页面不能显示GBK汉字。
Jsp/Servlet不能接收表单提交的汉字。
JSP/Servlet数据库读写无法获取正确的内容。
这些问题的背后是各种错别字的转换和处理(第三个除外,因为Java字体设置不正确。
向上)。解决相似字符编码问题,需要了解Jsp/Servlet的运行过程,检查可能存在的问题。
每一分。
3.2 JSP/servlet web编程中的编码问题
运行在Java应用服务器上的JSP/Servlet为浏览器提供HTML内容,其流程如下图所示:
其中有一些字符编码转换的地方:
由a.JSP编译。Java应用服务器将根据JVM的file.encoding值读取JSP源文件,并将其转换为internal。
对字符进行编码,生成JAVA源文件,并根据file.encoding值将其写回文件系统。如果当前系统语言
GBK是受支持的,那么现在就不会有编码问题。如果是英文系统,比如LANG是en_US的Linux,
或者AIX或Solaris,将JVM的file.encoding值设置为GBK。如果系统的语言是GB2312,根据需要
,确定是否设置file.encoding。将file.encoding设置为GBK可以解决潜在的GBK字符乱码问题。
B.Java需要编译成。类将在JVM中执行,这个进程与。
问题。从这里开始,servlet和jsp的操作是相似的,除了Servlet的编译不是自动的。
C.Servlet需要将HTML页面内容转换成浏览器可以接受的编码内容并发送出去。依靠每一个
JAVA App Server的实现,有的会查询浏览器的accept-charset和accept-language参数或者
编码值由其他猜测决定,而其他猜测则被忽略。因此,常数编码可能是最好的解决方案。
对于中文网页,可以在JSP或者Servlet中设置content type= text/html;charset=GB 2312 ;如果页面
中有GBK字符,则它被设置为content type= text/html;Charset=GBK ,由于IE和网景对GBK的支持
程度不同。您需要测试这个设置。
因为16位JAVA char的高8位在网络传输时会被丢弃,而要保证汉字(包括嵌入
和servlet是预期的内部代码,可以用PrintWriter ut=RES . getwriter()代替。
output stream out=RES . get output stream(),打印机编写器将根据contentType中指定的选择输出流。
用于转换的字符集(必须在此之前指定ContentType!);也可以用OutputStreamWriter封装。
ServletOutputStream类使用write(String)输出中文字符串。
对于JSP来说,JAVA应用服务器应该能够保证现阶段嵌入的汉字传输正确。
D.这就是URL字符编码问题。如果get/post方法从浏览器返回的值包含中文字符信息
,servlet将不会获得正确的值。在SUN的J2SDK中,HttpUtils.parseName在解析参数时根本不测试。
考虑浏览器的语言设置,但是以字节模式解析获得的值。这是互联网上讨论最多的编码问题。因为这是一个设计缺陷,获得的字符串只能在bin模式下重新解析;或者以hachttputils类的形式。
绝对的。参考文献2和3都有介绍,但最好把中文编码GB2312和CP1381改成GBK,否则。
遇到GBK汉字,还是会有问题。
Servlet API 2.3提供了一个新的函数httpServletRequest。用于调用的SetCharacterencoding
在request . getparameter(" param _ name ")之前指定应用想要的编码,这样有助于彻底解决这个问题。
问题
WebSphere Application Server扩展了标准的Servlet API 2.x,以提供更好的多语言支持。
在上述C和D的情况下,WAS必须查询浏览器的语言设置,以及zh、zh-cn等。默认情况下映射到JAVA。
编码CP1381(注意:CP1381只是相当于GB2312的代码页,GBK不支持)。这样对我。
我想是因为我无法确认Browser运行的操作系统是支持GB2312还是GBK,所以选择了较小的那个。但是实际应用中
还是系统要求页面上出现GBK汉字,最著名的是“?”以朱总理的名义?(rong2,0xe946,/u9555),由
因此,有时仍有必要将编码/字符集指定为GBK。当然,改变WAS中的默认编码并不像上面所说的那样。
然后,请参考第5)条中的a、b项,并具体说明-
dfile . encoding=GBK;对于d,请指定-
Ddefault.client.encoding=GBK .如果指定了-Ddefault.client.encoding=GBK,则在c #中不能再使用它
指定字符集。
3.3读写数据库时的编码问题
JSP/Servlet编程中经常出现编码问题的另一个地方是在数据库中读写数据。
所有流行的关系数据库系统都支持数据库编码,这意味着您可以在创建数据库时指定自己的字符。
设置,数据库的数据以指定的编码形式存储。当一个应用程序访问数据时,入口和出口处都会有数据。
编码转换。对于中文数据,要保证数据的完整性。GB2312、GBK和UTF-8都是可选数据库。
编码;如果选择了ISO8859-1(8位SBCS),则应用程序必须写入16位中文字符或
Unicode被分成两个8位字符。在读取数据后,需要合并这两个字节,并识别其中的SBCS。
人物。没有充分利用数据库编码的作用,反而增加了编程的复杂性,ISO8859-1不是推荐的数据。
库编码。在编写JSP/Servlet时,可以先利用数据库管理系统提供的函数检查JSP/Servlet中的中文数据是否正确。
那么就要注意读取数据的编码了。一般在JAVA程序中获取Unicode。写入数据时的相位
反。
3.4查找问题的常用技巧
定位中文编码问题最愚蠢也是最有效的方法,就是在你认为有嫌疑的程序后面打印这个词。
字符串的内部代码。通过打印字符串的内码,可以找出汉字什么时候转换成Unicode,什么时候转换。
Unicode转换回中文内码。一个汉字什么时候变成两个Unicode字符,汉字字符串什么时候转换?
一串问号,汉字字符串的高位是什么时候被截掉的.
选择适当的样本字符串也有助于区分问题的类型。如:“aa,aa?Aa "等中英文、国标和GBK的特色。
包含所有字符的字符串。一般来说,英文字符无论怎么转换处理都不会失真(如果遇到可以试试。
增加连续英文字母的长度)。
4.结束语
其实JSP/Servlet的中文编码并没有想象的那么复杂,虽然没有定位和解决问题的规则,各种
运行环境不同,但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。然而,随着
中文字符集的变化,不仅仅是java编程,中文信息处理中的问题还会存在一段时间。
5.参考文章
1)性格问题复习
Java编程技术中汉字的分析与解决
WebSphere中的NLS字符:SBCS/DBCS显示在同一页面上
4) GB18030
5)在web应用程序中设置语言编码:Websphere applications Server
作者简介
张建芳,软件工程师,毕业于北京理工大学计算机应用学院,有多年的中文本地化经验。你可以通过
与jfzhang@usa.net取得联系。
/////////////////////////////////////////////////////////////////////////////////////
jsp乱码的解决方案。
1最基本的乱码问题。
这个乱码问题是最简单的乱码问题。一般都会出现新的社团。就是页面代码不一致导致的乱码。
% @ page language= Java page encoding= UTF-8 %
%@页content type= text/html;charset=iso8859-1%
超文本标记语言
头
中文问题/标题
meta http-equiv= Content-Type Content= text/html;charset=UTF-8
/头
/头
身体
我是个好人。
/body
/html
三地代码。
第一位的编码格式是jsp文件的存储格式。Eclipse将根据这种编码格式保存文件。并编译jsp文件。
,包括里面的汉字。
第二种编码是解码格式。因为另存为UTF-8的文件是解码成iso8859-1的,所以如果有中文的话会乱码。也
必须是一致的。而这行的第二名,可不行。默认使用iso8859-1编码格式。所以如果没有。
这一行“我是好人”也会出现乱码。必须是一致的。
第三段代码是控制浏览器的解码模式。之前的解码是否一致正确并不重要。有些网页是乱码,因为浏览器无法确定使用哪种编码格式。因为页面有时嵌入在页面中,导致
浏览器混淆了编码格式。有一个乱码。
2通过邮件提交表单后收到的乱码问题。
这个问题也是常见的。这个乱码也是tomcat的内部编码格式iso8859-1,意思是post
提交的时候,如果没有设置提交的编码格式,会以iso8859-1提交,但是接受的jsp会是utf-8。
接受。导致乱码。为此,这里介绍几种解决方案,并进行比较。
接受参数时会执行代码转换。
String str=新字符串(request . getparameter( something )。getBytes(“ISO-8859-1”),“utf-8”)
;在这种情况下,每个参数都必须以这种方式进行转码。很麻烦。但是你真的可以得到汉字。
在请求页面的开始,执行请求的编码代码request . setcharacterencoding( UTF-8 ),并将其提交给
的字符集设置为UTF-8。这样,接受此参数的页面就不必进行代码转换。直接使用
string str=request . getparameter( something );可以获得汉字参数。但是每一页都需要贯彻这句话。
此方法对post提交有效,但没有用于get提交和上传文件的enctype=multipart/form-data。
有效。这两个的乱码情况后面会分别说明。
为了避免在每个页面上写request . setcharacterencoding( UTF-8 ),建议对所有JSP使用一个过滤器。
执行编码处理。这个网站上有很多例子。请自己检查一下。
3.表单get提交方法的乱码处理方法。
如果使用get提交中文,接受参数的页面会出现乱码,而产生这种乱码的原因是tomcat的内部编码网格。
Iso8859-1导致。Tomcat会用get iso8859-1的默认编码方式对中文字符进行编码,编码后追加到url中,导致
通过接受页面获得的参数是乱码/,
解决方案:
使用上面例子中的第一种方法解码接收到的字符,然后对它们进行代码转换。
Get取url提交,在输入url之前,已经经过iso8859-1编码。要影响此代码,您需要
将useBodyEncodingForURI=true 添加到server.xml的连接器节点中
配置,可以控制tomcat对get的汉字编码方式。上述属性也用于控制get提交。
要编码的request . setcharacterencoding( UTF-8 )。所以它被自动编码为utf-8,页面被接受。
平常心接受就好。但是我认为真正的编码过程是tomcat基于
连接器端口=8080
max threads= 150 minSpareThreads= 25 maxSpareThreads= 75
enable lookups= false redirect port= 8443 accept count= 100
debug= 0 connection time out= 20000 useBodyEncodingForURI= true
disableUploadTimeout= true uri encoding=" UTF-8 "/
其中设置的uri encoding="utf-8 "再次被编码,但是因为它已经被编码为utf-8,所以编码不会改变。
融化了。如果编码是从url获得的,则接受的页面根据URI编码=“UTF-8”进行解码。
4上传文件时分辨率混乱
上传文件时,在表单form中设置enctype=multipart/form-data 。这样,文件以流模式提交。
如果使用apach的上传组件,会发现很多乱码图片。这是因为apach早期的commons-fileupload.jar
Bug,把汉字拿出来解码。因为提交了这个方法,所以自动使用tomcat默认编码格式iso-8859-1进行编码。但乱码的问题是,句号、逗号等特殊符号成为乱码,汉字个数为奇数就会出现乱码。
,偶数正常解析。
解决方案:下载commons-fileupload-1.1.1.jar这个版本的jar已经解决了这些bug。
但是,在检索内容时,仍然需要将检索到的字符从iso8859-1转换为utf-8。可以得到所有正常的汉字和字符。
接线员。
关于url请求的Java代码,接受乱码参数。
url的编码格式取决于上面提到的uri encoding="utf-8 "。如果设置了这种编码格式,这意味着
带url的汉字参数必须编码。否则,得到的汉字参数值都是乱码,例如
a link response . send rect("/a . JSP?姓名=张大伟”);并直接在a.jsp使用。
字符串名称’);你得到的是乱码。因为规定必须是utf-8,所以这个转弯应该这样写:
response . send rect("/a . JSP?Name=URLEncode.encode("张大伟"," UTF-8 ");你可以。
如果这个参数URI编码=“UTF-8”没有设置会发生什么?否则,将使用默认的编码格式。
iso8859-1 .问题又出来了。第一,如果参数值的个数是奇数,可以正常解析。如果是偶数。
号,得到的最后一个字符是乱码。也就是说,如果最后一个字符是英文,可以正常解析,但中文标记
该符号仍然显示为乱码。作为权宜之计,如果您的参数中没有中文标点符号,您可以在参数值的末尾添加一个英文符号。
要解决乱码问题,请获取参数,然后删除最后一个符号。也可以凑或者用。
6关于url请求的脚本代码,收到的参数是乱码。
脚本还会控制翻页,还会涉及附带的参数,接受页面解析这个参数。如果这
如果中文字符没有按照URI编码=“UTF-8”的规定进行编码,接收页面接收到的中文字符也是乱码。脚本
编码比较麻烦,所以必须有相应的编码脚本文件,然后调用脚本中的方法对汉字进行编码。
7关于MyEclipse中jsp打开的乱码问题
对于现有项目,Jsp文件的存储格式可能是utf-8。如果eclipse是新安装的,默认情况下它是打开的。
的编码格式是iso8859-1。所以jsp中的汉字出现乱码。这个乱码很容易解决,直接去
在eclipse3.1的首选项中找到general-> edidor,设置为utf-8作为你的文件打开代码。黯然失色
以新的编码格式自动重新打开。汉字可以正常显示。
关于eclipse中html页面打开的乱码情况
因为大部分页面都是dreamweaver制作的,所以它的存储格式和eclipse不一样。
一般来说,在eclipse中创建新的jsp,直接从dreamweaver复制页面内容并粘贴到jsp中。
//////////////////////////////////////////////////////////////////////////////////////////
中文乱码jsp的解决方案 JSP中java中文编码的个人经验终于看到完整的解决方案了。
2006年4月5日
====================http://www . glgg . net/blog===================zsjnju @ hotmail . com========
=======
java应用程序出现乱码是很常见的。毕竟现在unicode还没有广泛使用,还有gb2312(包括gbk)
简化的、传统的)系统应该被正确地实现。
中文显示和数据库存储是最基本的要求。
========================http://www . glgg . net/blog==================================
1、首先开发者要知道自己为什么会遇到乱码,遇到了什么样的乱码(无意义的符号或者一串问号或者
别的)。
新手遇到一堆乱七八糟的角色,一般都会手足无措。最直接的反映就是打开谷歌,搜索“java中文”(这个字符
字符串在搜索引擎上的查询频率很高),
然后再一个一个的看别人的解决方案。这没有错,但是很难达到目标,原因如下。
总之,乱码的原因有很多,解决方法也完全不同。要解决问题,首先要分析自己的语境。
环境”。
========================http://www . glgg . net/blog================================
2.具体来说,需要哪些信息来确定项目中乱码的根源。
a、开发者使用的操作系统
j2ee容器的名称和版本
c,数据库名,版本(确切版本)和jdbc驱动版本。
d、乱码的源代码(比如system out,或者在jsp页面,如果是在jsp,那么头
部里的声明也很重要)
=========================http://www . glgg . net/blog===================================
3.如何初步分析乱码产生的原因?
有了以上信息,基本上就可以发帖求助了。相信你放在javaworld等论坛上,很快就会有专家给你。
一个有效的解决方案。
当然不能总靠发帖求助,也要想办法自己解决问题。如何开始?
a、分析你的“乱码”是什么。实际上,这并不难,例如
system . out . println(test string);
这一段是乱码,我们不妨用穷举法猜测一下它的实际编码格式。
system . out . println(new String(teststring . getbytes(" ISO-8859-11 ",《GB 23121》));
system . out . println(new String(teststring . getbytes(" UTF81 ",《GB 2312)1);
system . out . println(new String(teststring . getbytes(" GB 23121 ",《GB 23121》));
system . out . println(new String(teststring . getbytes(" GBK ")," GB 2312));
system . out . println(new String(teststring . getbytes(" big 51 ",《GB 2312)1);
以此类推,上面的代码是指读取既定编码格式的testString的“乱码”并转换成gb2312(此处仅
以中文为例)
然后你看哪个转换的结果可以,然后。
b、如果使用以上步骤都能得到正确的中文,说明你的数据肯定是有的,只是在界面上显示不正确。
已经开始了。然后第二步是修正你的视图部分。
,通常需要检查jsp中是否选择了正确的页面代码。
在这里,我要声明一个被很多人误解的点,那就是% @ page content type=" text/html;charset=GB2312百分比
和META http-equiv=Content-Type。
content=" text/html;两者的区别。通常,互联网上的许多文章提到中国的问题时说
在数据库中选择unicode或gb2312存储,同。
可以通过在jsp中用page指令声明代码来解决。但我觉得这种说法是不负责任的,它让我付出了N多的时间。
对着不存在的随机码郁闷。实际上,佩奇
的作用是为java提供编码方法,在jsp编译成html时“读取”表达式中的字符串(类的一部分)
像上面第三个语句的作用),和元
众所周知,它的功能是为IE浏览器提供编码选项,并用于“显示”最终数据。但是没看到有人提醒我。
我一直用page作为meta。
结果,原本是iso-8859的数据被page指令读成了gb2312,因此出现了乱码,于是添加了编码转换函数来转换所有的
字符串数据从iso8859传输到gb2312(对于
当时没想那么多,因为可以正常显示,就改了,呵呵,当时真的没有。
是时候慢慢排查问题了)。
==========================http://www . glgg . net/blog====================================
===
4.数据库用什么样的编码比较好?
目前流行的DB主要有sql server、mysql、oracle、DB2等。其中,mysql作为免费DB的老大,性能和威力都非常大。
可以识别,安装配置方便。
驱动要完美,性价比绝对OK。所以以mysql为例。
个人建议使用mysql的默认代码进行存储,即iso-8859-1(对应mysql的选项中的latin-1)。理由
主要有几个原因,一个是iso-8859-1对齐。
文的支持是好的;二是与java中默认编码一致,至少避免了很多地方编码转换的麻烦;三是默认比例。
它更稳定,兼容性更好,因为多编码
支持是由特定的数据库产品提供的,更不用说与其他数据库的不兼容性,甚至他们自己的不同版本也可能有兼容性问题。
问题。
比如在mysql 4.0之前的产品中,很多中文解决方案都是在connection中使用characterEncoding字段。
代码,比如gb2312什么的,这样就可以了。
是的,因为原始数据都是用ISO8859_1编码的,所以jdbc驱动会使用url中指定的字符集来编码。
ResultSet.getString(*)取出编码的那个。
字符串。所以我们可以直接得到gb2312的数据。
但是mysql 4.1的推出给很多dbadmin带来了很多麻烦,因为mysql4.1支持列级的字符。
集,每个表和列都可以指定代码。
,如果未指定,则为ISO8895_1,因此jdbc将根据列的字符集对数据进行编码,而不是使用
获取所有数据的全局参数。
从另一个方面也说明乱码问题是一件很复杂的事情,原因太多了。我只是针对自己的遭遇。
////////////////////////////////////////////////////////////////////////////////////////
jsp问题的中文解决方案[转载]
JSP和Java一样,是目前的热门话题。它是服务器端的一种编译和执行。
行的Web设计语言,因为脚本
语言采用了Java,所以JSP继承了Java的所有优点。可是在使用JSP程序的过程中,常遇到中文乱码问题
,很多人为此头疼不已,初学的时候我就深受其害,而且使用平台不同,中文乱码问题的解决方法也不
同,无形中增加了学习JSP的难度。其实,在彻底了解相关原因后,问题还是比较容易解决的。,以下
是我总结的解决方法,相信对读者会有一定的借鉴意义。 (因为我使用得最多的是Tomcat环境,所以
主要是以Tomcat为例,其它的环境只会提及一下,但解决办法也是差不多的!
每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展ASCII码、中国的GB2312
-80、日本的 JIS 等,作为该国家(区域)信息处理的基础,有着统一编码的重要作用。由于各本地字
符集代码范围重叠,相互间信息交换困难,软件本地化版本独立维护成本较高。因此有必要将本地化工
作中的共性抽取出来,做一致性处理,将特殊的本地化处理内容降低到最少,这就是所谓的国际化
(I18N)。各种语言信息被规范为本地信息,而底层字符集采用包含了所有字符的Unicode。
相信了解JSP代码的读者对ISO8859-1一定不陌生,ISO8859-1是我们平时使用比较多的一个CodePage,
它属于西欧语系。GB2312-80 是在国内计算机汉字信息技术发展初始阶段制订的,其中包含了大部分
常用的一、二级汉字和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符
集,这也是最基本的中文字符集。
GBK 是 GB2312-80 的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是 0x8140~
0xFEFE,剔除高位 0x80 的字位,其所有字符都可以一对一映射到 Unicode 2.0,也就是说 Java
实际上提供了对 GBK 字符集的支持。
GB18030-2000(GBK2K) 在 GBK 的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的文字。
GBK2K 从根本上解决了字位不够、字形不足的问题。
1.Tomcat 4开发平台
这个版本应该是我们经常用到的版本,所以讨论得会比较详细。
Windows 98/2000下的Tomcat 4以上版本都会出现中文问题(而在Linux下和Tomcat 3.x中则没有问
题),主要表现是页面显示乱码。
为解决这个问题,最简单的方法就是在每个JSP的页面开始处加上 %@ page language=“Java”
contentType=“text/html; charset=gb2312”% 。不过,这还不够,虽然这时显示了中文,但是发现
从数据库读出的字段变成了乱码。经过分析发现: 在数据库中保存的中文字符是正常的,数据库用
ISO8859-1字符集存取数据,而Java程序在处理字符时默认采用统一的ISO8859-1字符集(这也体现了
Java国际化思想),所以在数据添加的时候Java和数据库都是以ISO8859-1方式处理,这样不会出错。但
是在读取数据的时候就出现问题了,因为数据读出也采用ISO8859-1字符集,而 JSP的文件头中有语句
%@ page language=“Java” contentType=“text/html; charset=gb2312”% ,这说明页面采用
GB2312的字符集显示,这样就和读出的数据不一样。这时页面显示从数据库中读出的字符是乱码,解决
的方法是对这些字符转码,从ISO8859-1转成GB2312,就可以正常显示了。这个解决办法对很多平台具
有通用性,读者可以灵活运用。具体的方法会在以下详细讲解。另外,对于不同的数据库如SQL
Server,Oracle,Mysql,Sybase等,字符集的选择很重要。如果考虑多语言版本,数据库的字符集就
应该统一采用ISO8859-1,需要输出的时候在不同的字符集之间做转换就可以了。
以下是针对不同平台的总结:
(1) JSWDK只适合于普通开发,稳定性和其他问题可能不如商业软件。 由于JDK 1.3版性能要好于
JDK 1.2.2很多,并且对中文的支持也较好,所以应该尽量采用。 现在jdk已经出到1.4版本了,所以
如果允许最好升级到最新的版本,这样对中文的也会较好,而且还可以得到更多的支持。
(2) Tomcat仅仅是一个对JSP 1.1、Servlet 2.2标准的实现, 我们不应该要求这个免费软件在细节
和性能上都面面俱到, 它主要考虑英文用户, 这也是为什么不做特殊转换,汉字用URL方法传递就有
问题的原因。大部分IE浏览器缺省始终以UTF-8发送, 这似乎是Tomcat的一个不足, 另外Tomcat不管
当前的操作系统是什么语言, 都按ISO8859去编译JSP, 似乎也欠妥。
2.JSP代码的中文处理
(1)如果与数据无关的操作,可以在页面首行加入
(2)将Form中的值传送到数据库中再取出来后全变成了“?”。Form用POST提交数据,代码中使用了语
句:
String st=new(request.getParameter(“name”).getBytes(“ISO8859_1”)), 而且也声明了
charset=gb2312。
要处理Form中传递的中文参数,应该在JSP中加入下面的代码,另外定义一个专门解决这个问题的
getStr类,然后对接收到的参数进行转换:
String keyword1=request.getParameter(“keyword1”);
keyword1=getStr(keyword1);
这样就可以解决问题了,代码如下:
%@ page contentType=“text/html;charset=gb2312”%
%!
public String getStr(String str){
try{String temp_p=str;
byte[] temp_t=temp_p.getBytes(“ISO8859-1”);
String temp=new String(temp_t);
return temp;
}
catch(Exception e){ }
return “NULL”;
}
%
%--http://www.cndes.com测试--%
% String keyword=“创联网络技术中心欢迎您的到来”;
String keyword1=request.getParameter(“keyword1”);
keyword1=getStr(keyword1);
out.print(keyword);
out.print(keyword1);
%
另外,流行的关系数据库系统都支持数据库Encoding,也就是说在创建数据库时可以指定它自己的字符
集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有
Encoding 转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。 GB2312、GBK、
UTF-8 等都是可选的数据库 Encoding,也可以选择 ISO8859-1 (8-bit), 但会增加了编程的复
杂度,ISO8859-1不是推荐的数据库 Encoding。在JSP/Servlet编程时,可以先用数据库管理系统提供
的管理功能检查其中的中文数据是否正确。
(3)JDBC Driver的字符转换
目前大多数JDBC Driver采用本地编码格式来传输中文字符,例如中文字符“0x4175”会被转成“0x41
”和“0x75”进行传输。因此需要对JDBC Driver返回的字符以及要发给JDBC Driver的字符进行转换
。当用JDBC Driver向数据库中插入数据时,需要先将Unicode转成Native code; 当 JDBC Driver
从数据库中查询数据时,则需要将Native code转换成Unicode。下面给出了这两种转换的实现:
String native2Unicode(String s) {
if (s == null s.length() == 0) {
return null;
}
byte[] buffer = new byte[s.length()];
for (int i = 0; i s.length(); i++) { if (s.charAt(i) = 0x100) {
c = s.charAt(i);
byte []buf = (“”+c).getBytes();
buffer[j++] = (char)buf[0];
buffer[j++] = (char)buf[1];
}
else {buffer[j++] = s.charAt(i);}
}
return new String(buffer, 0, j);
}
要注意的是,有些JDBC Driver如果通过JDBC Driver Manager设置了正确的字符集属性,以上方法
就不需要了。具体情况可参考相关JDBC的资料。
其实理解了,中文乱码就这么一回事!反复使用就会摸出一定的门道了!我觉得以上的三种方法,只要你
真的能弄懂,在遇到中文问题时,在这三种方法多试尝,我保证你不再会使这种中文问题所烦!
以上只是自己的一些经验所谈,如果有什么不对,希望能提出,共同学习!
//////////////////////////////////////////////////////////////////////////////////////////
我的乱码之路——JSP与MySQL交互的中文乱码解决方案及总结
首先实现了一个StringConvert bean(GBtoISO()和ISOtoGB()两个方法),解决了与MySQL数据库
交互的时候的部分中文乱码问题:在JSP程序中读取MySQL的中文内容,用这两个方法可以解决乱码问题
。
但是从JSP写入到MySQL的中文内容都成了乱码,并且再读出来的时候也显示为“??”,在这里应
该出现了编码转换过程中的字符信息丢失。郁闷的是,我在命令行窗口中登陆到MySQL后,执行如
“INSERT INTO customerVALUES(字符,...)”这样的语句时,写入到数据表中的中文内容又是显示正
常的!!!数据库使用的字符集是utf8。
碰壁多次,终于发现一条解决问题的路径:查看MySQL手册的时候,看到一条这样的语句:
Toallow multiple character sets to be sent from the client, the "UTF-8"encoding should be
used, either by configuring "utf8" as the defaultserver character set, or by configuring
the JDBC driver to use "UTF-8"through the characterEncoding property.
此外,在查阅《MySQL权威指南》时,发现在查询语句中可以使用这样的语法将字符串转换到一个
给定的字符集:_charset str。
其中charset必须是服务器支持的某个字符集。在本例中,shopdb数据库使用的默认字符集是utf8
,于是开始测试:
先输入INSERT INTO publish Values(8,_gb2312 高等教育出版社) 写入后中文变成“??
”
再试INSERT INTO publish Values(8,_gbk 高等教育出版社) 结果同上
INSERT INTO publish Values(8,_utf8 高等教育出版社) 这下更干脆,什么都没有!!
快疯了!!没办法,用show character set;命令查看MySQL支持的字符集,心想我都试一遍总
有一个能成功吧。浏览了一下,发现没有几个熟悉的字符集,就只剩下一个latin1(ISO-8859-1)比较常
见了,不会是它吧,一试之下果然便是。
INSERT INTO publish Values(8,_latin1 高等教育出版社) 输入中文能够正确显示。
这下总算找到方法了,把Tomcat下配置的数据库连接池的url改为
"...characterEncoding=UTF-8",然后把写入数据库的中文内容用
String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")进行转码,其中s1为中文字符
串.然后再写入到数据库一切显示正常。
为解决这个问题查看了n多资料,现作一个总结:由于字符集和字符编码方式的不同,在OS以
及程序之间传递数据(尤其是multiple character sets中的数据)时便会产生乱码以及字符信息的丢
失.解决这个问题的关键便是了解数据输出端和接收端使用的字符集和字符编码方式,如果这两种编码
方式不同,便需要在数据出口或入口处进行 转码。一般的说,在编写代码,编译,以及运行期间都会字
符数据的传递,因此需要特别小心。
在编写代码的时候,你可能会使用某种开发工具,例如我正在使用的Eclipse.或许在写的时候
一切正常,可是一旦保存后再次打开文档,所有的中文字符都变成了乱码。这是因为在编写的时候,这
些字符数据都在内存的某个stream中,ok,这没问题,可是保存的时候这个stream中的数据会被写入到
硬盘,使用的就是你的开发工具默认的编码方式,如果很不幸你的开发工具默认编码方式是ISO-8859-1
,中文字符信息就不能正确地存储。Eclipse中可以这样查看并修改默认字符编码方式:Project-
Properties- info,这里有"default encoding for text file"。如果设置为GBK,那么编写代码
并保存这关就过了。
对于JSP程序而言,编写完代码后就交给Container,首先它们会被转成.java文件,然后编译成
.class才能提交给服务器执行.这个过程也存在字符编码问题.java编译器(javac)使用操作系统的语
言环境作为默认的字符编码方式,JRE(Java Runtime Environment)也是这样。只有当编译和运行环境
的字符编码方式与存储源文件的编码方式相同时,中文字符才能正确地显示。否则就需要在运行时进行
转码,使它们使用兼容的编码。这里的设置可以分为几个层次:操作系统层支持的语言,这是最重要的
,因为它会影响JVM的默认字符编码方式,同时对字符的显示,如字体等有直接影响;J2EE服务器层
,大多数服务器都可以对字符编码进行自定义的配置,例如Tomcat就可以通过web.xml中设置
javaEncoding参数设置字符编码,默认是UTF-8.
IE也可以设置成总是使用UTF-8编码来发送请求.应用程序层,每个配置在服务器下的程序都可以
设置自己的编码方式,这个我目前还没有用到,以后再学习。
运行时的转码,运行时期,应用程序很可能需要与外部系统进行交互,例如对数据库进行读写
,对外部文件进行读写.在这些情况下,应用程序免不了要和外部系统进行数据交换。那么对于中文字
符, 数据出入口的编码方式就显得特别重要了。一般外部系统都有自己的字符编码方式,我的例子中
配置的MySQL就是使用的UTF-8编码。JSP页面通过设定"charset=gb2312",
使用gb2312编码,在它与数据库交互的时候就需要进行显式的转码才能正确处理中文字符。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。