admin 管理员组

文章数量: 1086019


2024年4月19日发(作者:jetbrains2022激活)

J2ee国际化应用utf-8解决方案笔记

到现在为止, 陆续接触了几个项目, 这几次都使用了不同的编码, 感觉在国际化时, 中文问

题上屡屡碰到问题, 每次都需要费点时间, 现在抽点时间总结一下, 也为同事以及以后的项

目提供一些参考。(utf-8是unicode的一种编码表现形式, 他能很好的兼容单字节编码格式)

项目名称

Webuniverse

前台jsp编码, 显示

UTF-8, GB2312, GBK

混合使用

UTF-8

Class类

Unicode

Unicode

Unicode

数据库

ISO-8859-1

IOS-8859-1

UTF-8

BookManagement GB2312

Workflow

1. 字符集

首先简要介绍一下字符集的概念, 这部分是从网上整理而来:

1.1. 单字节字符集

ASCII码,它以8bit字节为单位存储,0-31及127为控制符,32-126为可见字符, 128-255

的ASCII码则没有定义。 为美国所使用。

ISO-8859-1是ASCII扩展到0-255的范围形成的。为西欧所扩展。

1.2. 双字节字符集

GB2312第一个字节大于127,则使用两个字节来组成一个汉字。若小于127, 仍用一个字节

来表示ASCII码定义的字符。

GBK 保持与GB2312兼容, 并含繁体中文字,日文字符和朝鲜字符。GBK是现阶段Windows

及其他一些中文操作系统的缺省字符集。

BIG5(台湾) SJIS(日本) 这两种编码与GB2312类似, 但扩展ASCII码的那部分编码方式是

不一样的。

1.3. 多字节字符集

Unicode 定义了31位的字符集, 现在基本上只使用了16位子集。U+0000 到 U+007F 与

ASCII 是一致的, U+0000 到 U+00FF 与 ISO 8859-1也是一致的。但每个字符都用16bit

来保存。

UTF-8是Unicode的一种表达方式, 它即兼容了单字节字符集, 又以一种组码方式实现了所

有的字符集。另外单字节字符不可能成为多字节字符的一部分。

2. 中文字符乱码的原因

2.1. 要注意编码的地方

下面是我实践加理解整理出来的东西, 也可能会有严重错误, 希望大家不啻指教。

2.1.1. jsp页面

 JSP编码格式

保存jsp页面的时候, 我们可以指定各种格式, 比如GBK, utf8等等。

读取和编译时, <%@ page contentType="text/html;charset=UTF-8"%> 用来指定容器是以什么

格式读取这个jsp页面的。不指定的话, 容器会获取操作系统的ng, 比如中文操作

系统为GBK, 存成Unicode格式。然后容器会把它编译成Unicode编码的class类。

 页面显示格式

它表示强制浏览器编码设为gb2312。这个设定对网页交互很有关系, 你设定了什么编码, 之

后你提交的请求就会按照这种编码格式来编码发送。比如,

post一个用户名:

utf-8下会发送:

name=松然

name=%E6%9D%BE%E7%84%B6

name=%CB%C9%C8%BB GB2312下发送:

Tomcat默认总是使用ISO-8859-1, 这就是说你用GBK编码的中文传到tomcat中, 在servlet

里默认输出n()总会得到乱码。

 容器参数接收

如上面所提的, 参数的传递方式跟页面显示编码的设定有关。那服务器端又是如何处理参数


本文标签: 编码 字符 格式 字符集 页面