分享

中文乱码的常见问题解决及相关编码知识 - Don‘t worry,be happy - C...

 iversion 2007-07-20
做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 国际化



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=430712

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多