请教Unicode的编码格式

03-08-07 AreYouOK?
Unicode到底是如何编码的?

UTF-8代表什么,如何编码?

java中的char是16位的,只能表示6万多个字符,好像汉字就有几万个吧,它怎么表示世界各国的语言字符?

好像有更多位的编码格式,但是怎么放在char里面,系统如何识别它?

raynix
2003-08-07 09:50
> Unicode到底是如何编码的?

这太复杂了,如果你感兴趣,可以看看

http://www.unicode.org

> UTF-8代表什么,如何编码?

UTF = Unicode transformation format

UTF-8 是www上普遍应用的encoding,因为它采用变长编码,兼容ascii

此外还有UTF-16, UTF-32等等

> java中的char是16位的,只能表示6万多个字符,好像汉字就?> 几万个吧,它怎么表示世界各国的语言字符?

不用操心了,java 支持unicode,unicode支持全部CJK字符,大概7万多,16位是肯定不够的了。

AreYouOK?
2003-08-07 09:54
>不用操心了,java 支持unicode,unicode支持全部CJK字符,大概7万多,16位是肯定不够的了。

可是char只有16位的,String是以char为基础的,在java内部如何表示怎么多字符?

AreYouOK?
2003-08-07 09:56
Java中支持的Unicode是什么版本的呢?

robbin
2003-08-07 10:06
Unicode字符集试图把全球所有的语言文字包含的字符都用统一的编码方式来表示,通常情况下Unicode也是使用双字节,也称为UTF-16,即总共可以表示65536(十进制)个字符,目前已经定义了38,887(十进制)个字符,包括了英语、俄语、阿拉伯语、希腊语、拉丁语、德语、等等语言的字符以及最常用的汉语和日语字符。由于光是汉语就实际上存在80,000(十进制)个字符,因此还不可能包括所有的字符。所以又提出UCS字符集,UCS(Universal Character Set)采用4字节表示字符,因此理论上可以表示2的32次方≈43亿(十进制)个不同的字符,目前Java还不支持UCS字符集。

robbin
2003-08-07 10:08
当前在程序中使用的Unicode编码,主要用的是UTF-8编码,一种Unicode编码的变体。UTF-8使用不定长度的编码值来表示字符。所以一个UTF-8字符有可能是单字节的,也有可能是双字节,3字节,甚至是6字节长度。当最多使用6字节的UTF-8编码的时候,UTF-8可以表示所有的UCS字符集。由于Java只支持到UTF-16,也就是3字节的UTF-8编码值,因此4字节、5字节和6字节的UTF-8就不在本文的讨论范围之内,我们只考虑单字节、双字节和3字节的UTF-8编码。

Unicode编码向UTF-8编码转换的规则可以参考J2SDK1.4的API文档,在java.io.DataInputStream类的描述中。

------------------------------------

这是我写的文章的一部分,摘出来,可能对你有帮助。

AreYouOK?
2003-08-07 10:13
谢谢各位了

那么,如果我想写一个支持国际化的程序,数据库里面可能会有多种语言

数据库编码采用什么比较合适?(UTF8?)

Web层读参数的时候是否需要额外编码,如request.setCharactorEncoding("xx")

如果是,采用什么合适?

robbin
2003-08-07 10:24
采用unicode就可以了,不需要直接用UTF-8,这两种编码的转换在Java内部是自动做的。web层除了要setEncodingCharacter(“UTF-8“)之外,还要把所有的JSP设为UTF-8的,并且要把JSP文件中的非ASCII字符转换成ASCII码(使用JDK自带的native2ascii)

前面已经讨论过了,用Unicode有一个坏处,就是不能按照拼音顺序对汉字进行order by。

AreYouOK?
2003-08-07 10:47
JSP需要

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

不然浏览器怎么知道用UTF-8发送

raynix
2003-08-07 10:53
> 采用unicode就可以了,不需要直接用UTF-8,这两种编码的

robbin, 我觉得unicode是一个大字符集的定义,而utf-8是对应这种字符集的一个encoding。类似的encoding还有utf-16/32等等。unicode本身不是encoding,你说呢?

AreYouOK?
2003-08-07 10:58
刚才贴的代码被吃掉了,重来

JSP里面需要

《meta http-equiv="Content-Type" content="text/html; charset=utf-8"》

不然浏览器怎么知道用UTF-8发送

在服务器端是用UTF-8来读的

AreYouOK?
2003-08-07 11:00
被吃掉的代码好象还造成了这个帖子乱码

没有过滤?

raynix
2003-08-07 11:09
老弟,输入代码前点一下“Code”按钮,论坛已经提供这种功能,不要另辟蹊径了。

robbin
2003-08-07 11:23
>>robbin, 我觉得unicode是一个大字符集的定义,而utf-8是对应这种字符集的一个encoding。类似的encoding还有utf-16/32等等。unicode本身不是encoding,你说呢?

你说的对,其实我们通常意义上说的unicode是指UTF-16,你可以把unicode看成两层含义,广义指所有的抽象意义的字符集定义,狭义的是指UTF-16,我比较习惯把UTF-16称做unicode。

>>JSP需要吗?

<%@ page contentType="text/html;charset=UTF-8" %>

raynix
2003-08-07 11:29
>我比较习惯把UTF-16称做unicode。

明白了,我比较较真, 呵呵。

猜你喜欢