`

java中文乱码的两篇文章(好)

 
阅读更多
http://blog.csdn.net/xulz/archive/2005/07/21/430712.aspx
做java web开发是不是会遇到编码问题,有网页之间参数传递的,也有与数据库存取有关的.下面是介绍相关内容的文章.
从 汉化 到 国际化
这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
遇到编码问题主要是由于Tomcat服务器端接收request对象默认是ISO_8859_1编码方式,对于大量解决中文问题看到过添加Filter方式来统一解决.
其实在POST前可通过request.setCharacterEncoding("GBK");来解决.


对于Java由于默认的编码方式是 UNICODE,所以用中文也易出问题,常见的解决是
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
//由于String类的构造方法可以使用指定的编码方式,缺省使用本地编码.则getBytes 方法用于将中文字符以“ISO-8859-1”编码方式转化成字节数组,而“GBK” 是目标编码方式。

------------------------------------------------------------------------------------------------------------
下面是weblogic介绍的一些知识:
字符编码简介

ASCII:只提供对128个英文字符的支持
ISO8859-1:每个字节表示一个字符,一个中文字符表示成两个字符,占两个字节UTF-8:英文占一个字节,中文占两个或三个字节
GB2312:英文占一个字节,中文占两个字节
GBK:在GB2312基础上提供了对扩展中文字符的支持
Big5:台湾使用的繁体中文的编码,类似于GB2312


Javac命令行参数-encoding指定了java源文件使用的编码
Java命令行参数-Dfile.encoding指定了class文件使用的编码
JDK 1.4中引入了java.nio.charset package

============================================================
IE里的编码行为
影响编码的选项:
1.“工具/Internet选项”菜单下的“高级/始终以UTF-8发送URL”(IE缺省设置)
2.HTML的head标签里的指定的content Type:<meta http-equiv=“Content-Type”content=“text/html”charset=“gbk”>
3.运行浏览器的windows的区域设置,这影响本机的缺省编码

对于post方式:
url采用UTF-8编码,再作URL Encoding;
parameter部分(及url里带的参数)采用HTML head里指定的编码(未指定使用本地缺省编码),但不作URL Encoding;
post数据采用HTML head里指定的编码,再作URL Encoding(content type为application/x-www-form-urlencoded 的情况下)


不选中“始终以UTF-8发送URL”时:
url、parameters和post数据均采用HTML head里指定的编码(未指定使用本地缺省编码);除了post数据,其他部分均不做URL Encoding


附:HTTP 1.1 规范:RFC2396 :
uric = reserved | unreserved | escaped
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
unreserved =alphanum| mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
escaped = "%" hex hex hex = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f“

Servlet2.3关于HttpServletRequest的说明:
getRequestURI() : not decoded
getServletPath() : decoded

--------------------------------------------------------------------------------------------------------------------------
常见问题及解决:
Q:jsp里边的所有中文在浏览器端显示不正常:
A:<%@ pagecontentType=“text/html;charset=GBK“%>
为使浏览器能正确显示中文,应在HTML <HEAD> 部分增加:
<meta http-equiv="ContentType"content="text/html"charset="gbk">



Q:response.setContentType(“Application/msword”)返回的word文档乱码:
A:在content type中指定编码:response.setContentType(“application/msword;charset=/”GBK/””)


其他编码问题:对于Oracle数据库:
使用select * from NLS_DATABASE_PARAMETERS;来查看数据库的字符集设置
使用alter database character set utf8来修改
使用oci driver时,需要在客户端设置正确的NLS_LANG环境变量



*注释:l10n i18n都是缩写:用的是英文单词的首尾字母和其间字母个数
l10n: localization 本地化
i18n: internationalization 国际化


http://blog.csdn.net/zgbsoap/archive/2005/10/25/516031.aspx

http://www.matrix.org.cn/thread.shtml?topicId=21142&fid=14

以下是我做的中文乱码的总结,希望能帮你解决问题:
一般在传送时使用的encoding:
使用GET 的方式:
String test = new String((request.getParameter("test")).getBytes("ISO-8859-1"),"GBK");

使用POST 的方式:
request.setCharacterEncoding("GBK");

pageEncoding及contentType的作用:
<%@ page pageEncoding="GBK" %>
pageEncoding是当jsp转译成_jsp.java时使用的encoding.预设是iso8859_1.
然後_jsp.java编译成_jsp.class是使用utf-8作为encoding.
response.setContentType("text/html; charset=GBK");
or
<%@ page contentType="text/html;charset=GBK" %>
就是输出到浏览器时的编码,预设是iso8859_1.
这样浏览器才知道应该用甚麽charset来显示.

资料库输出到jsp出现乱码:
第一,检查一下你database里的资料是否乱码.
如果database里的资料是乱码,检查一下再进入资料库时request接收後资料是否是乱码.
即忘了加入request.setCharacterEncoding(String charset);
request.setCharacterEncoding(String charset)把表单传送过来的资料以charset的字型来encoding.
如果接收时是正常的.但资料库是乱码,
那就检查一下database的编码设定.

如果资料库的资料正常.但输出到jsp的资料是乱码.
以mysql为例:
String connect = "jdbc:mysql://localhost/dbname?user=&password=&useUnicode=true&characterEncoding=GBK";
就上面的mysql的例子.
需要设定useUnicode为true.
而characterEncoding=GBK必须与contentType的charset一样.
mysql的设定档my.ini:
[client]default-character-set=GBK
[mysqld]default-character-set=GBK


以下连结则介绍了access的jdbc:odbc的编码:
http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/bridge.html

include资料出现乱码:
旧的版本tomcat是不能在每一页jsp中加入
<%@ page contentType="text/html; charset=GBK" %>
tomcat 5.x之後是可以每一页都加入上面那一句的.
会必须include的page及被include的page的编码要相同.连大小写都要相同.

但这样做不是最好的方法.

其实可以在你的web application底下的web.xml的<web-app>里加入:


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">
.........
.........
<jsp-config>
<jsp-property-group>
<description>jsp encoding example</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
<description>html encoding example</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.html</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>
</jsp-config>
.........
.........
</web-app>



apache整合tomcat 中文问题:
apache+tomcat+JK2集成时,http的请求是通过jk2的ajp13转到tomcat的8009端口处理的,
所以要修改tomcat/conf/server.xml中的以下两项
1 <Connector port="8080"……URIEncoding="GBK" >
2 <Connector port="8009"……URIEncoding="GBK" >
都加上URIEncoding="GBK"。


以下是javaman写的中文问题总结:
http://www.matrix.org.cn/forum_view.asp?forum_id=14&view_id=676
分享到:
评论

相关推荐

    如何解决java压缩文件乱码问题

    在本篇文章中我们给大家分享的是一篇关于java压缩文件乱码问题的解决办法,有需要的朋友们可以学习下。

    字符集基础知识(描述解决java乱码问题的最详细的资料)

    以“中文”二字为例,详细的介绍了从java源文件,jsp页面到class文件,以及在web容器中编码解码的详细的具体的过程,只要深刻理解这篇文章,所有java乱码问题都将轻松解决。

    Java中URL传中文时乱码的解决方法

    为什么说乱码是中国程序员无法避免的话题呢?这个主要是编码机制上的原因,大家都知道中文和英文的编码格式不一样,解码自然...这篇文章就给大家分享了Java中URL传中文时乱码的解决方法,有需要的朋友们可以参考借鉴。

    解决Java原生压缩组件不支持中文文件名乱码的问题

    本篇文章主要介绍了解决Java原生压缩组件不支持中文文件名乱码的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    JOX(解决了日期格式转化和导出XML中文乱码问题)

    核心:解决了日期格式转化和导出XML中文乱码问题 介绍:有时候,我们需要把javabean的内容保存到文件,或者通过网络...从网上搜了很久也没有一篇完整的解释JOX用法的文章,今天我就把我这两天学习的结果和大家分享一下!

    JAVA自学之路

    在这儿之后,你可以选择向J2ME、或者Java GUI、Socket编程等方向努力,但是通过第一篇的办法,你可以很容易就将这方向过滤掉(永远不要忘了我们是为了就业),好吧,暂时和它们诀别,还是向着J2EE的方向前进吧。...

    完美JAVA压缩和解压缩(源码)

    结合以下两篇文章做了个压缩和解压缩工程,开放全部源码! &lt;br&gt;http://agilejava.blogbus.com/logs/2005/09/1406938.html&lt;br&gt;http://blog.csdn.net/robin622/archive/2008/01/01/2008203.aspx

    深入剖析JSP和Servlet对中文的处理过程

    深入剖析JSP和Servlet对中文的处理过程,网上的一篇文章而已,PDF格式慢慢看,适合打印。

    Spring MVC 入门实例

    这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...

    asp.net知识库

    xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;  ...

Global site tag (gtag.js) - Google Analytics