1:编码方式
阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。 英文 DOS
阶段二 ANSI编码
(本地化) 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 中文 DOS,中文 Windows 95/98,日文 Windows 95/98
阶段三 UNICODE
(国际化) 为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。
类型或操作 | C++ | Java |
字符 | wchar_t | char |
字节 | char | byte |
ANSI 字符串 | char[] | byte[] |
UNICODE 字符串 | wchar_t[] | String |
字节串→字符串 | mbstowcs(), MultiByteToWideChar() | string = new String(bytes, "encoding") |
字符串→字节串 | wcstombs(), WideCharToMultiByte() | bytes = string.getBytes("encoding") |
从上边知道
Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”,而 C++ 中的 char 代表一个字节;
Java 中字符串类 String 中的内容是 UNICODE 字符串;
二:JSP及Java程序中的传送编码方式
JSP页中加如下语句
<%@ page language="java" pageEncoding="GBK"%>
其中pageEncoding是当jsp转译成_jsp.java时使用的encoding.预设是iso8859_1.
当_jsp.java编译成_jsp.class是使用utf-8作为encoding.
<%@ page contentType="text/html;charset=GBK" %>
输出到浏览器时的文件格式和编码方式,预设是iso8859_1;
也可以直接调用response.setContentType("text/html; charset=GBK")来设定,但是必须在传回任何结果之前调用,否则不起作用。
三:传送数据时,不同的传送方式的处理方法
使用GET 的方式:
String test = new String((request.getParameter("test")).getBytes("ISO-8859-1"),"GBK");
使用POST 的方式:
request.setCharacterEncoding("GBK");
注意,其中的GBK的编码与页面的pageEncoding必须一致,如果页面的编码是UTF-8,那么这里也应该把GBK改成UTF-8,否则同样会乱码