社区
Java SE
帖子详情
请教Unicode的编码格式
AYellow
2003-08-07 10:11:37
Unicode到底是如何编码的?
UTF-8代表什么,如何编码?
java中的char是16位的,只能表示6万多个字符,好像汉字就有几万个吧,String是以char为基础的,java内部怎么表示世界各国的语言字符?
好像有更多位的编码格式,但是怎么放在char里面,系统如何识别它?
...全文
309
4
打赏
收藏
请教Unicode的编码格式
Unicode到底是如何编码的? UTF-8代表什么,如何编码? java中的char是16位的,只能表示6万多个字符,好像汉字就有几万个吧,String是以char为基础的,java内部怎么表示世界各国的语言字符? 好像有更多位的编码格式,但是怎么放在char里面,系统如何识别它?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fpwang
2003-08-07
打赏
举报
回复
关注,学习
songbo_pp
2003-08-07
打赏
举报
回复
Java 内部处理字符使用的字序方式是 Unicode,这是一种通行全球的编码方式。Unicode 因为必须将中、韩、日、英、法、阿拉伯……等许多国家所使用的文字都纳入,目前已经包含了六万多个字符,所以 Unicode 使用了 16 个位来为字符编码。因为 Unicode 使用了 16 位编码,所以每个字符都用 16 位来储存或传输是很自然的事,这种储存或传输的格式称为 UTF-16(是不是很像战斗机的名字)。如果你使用到的字符都是西方字符,那么你一定不会想用 UTF-16 的格式,因为体积比 8 位的 Latin-1(一种扩充 ASCII 的编码)多了一倍。所以 Unicode 另有一种储存或传输的格式,叫做 UTF-8。UTF-8 的格式在编码英文时,只需要 8 位,但是中文则是 24 位,所以中文字出现比例高的地方还是使用 UTF-16 比较节省空间。Java 的 Class File(也就是 bytecode)中有一字段叫做常数区(Constant Pool),一律使用 UTF-8 为字符编码。
为了将成千上万的文字统一到同一个编码机制之下,在兼顾经济的原则下,不管是东方文字还是西方文字,在Unicode中一律用两个字节来表示。也就是说,Unicode是一种双字节编码机制的字符集,使用0-65535之间的双字节无符号整数对每个字符进行编码。这样,在Unicode字符集中,至少可以定义65536个不同的字符,足以应付目前绝大多数场合的需要。
UTF-8 是一种不等幅的编码方式,UTF-8编码的字节长度取决于所要编码的字符在ISO 10646中的编码值。在UTF-8中,不同的字符,可能需要1-6个字节来进行编码。对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行编码(等同于ASCII码)。对于多字节的UTF-8编码,如果编码包含n个字节,那么第一个字节的前n位为1,第一个字节的第n+1位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。
UTF-16也是Unicode的变形表示方式的一种。它的目的是维持双八位的编码方式,同时也用一些特殊的双八位来表示ISO 10646中非基本多文种平面(BMP)中的一些字符。这种用来表示非BMP字符的方法在Unicode中称作代理对机制。
代理对的编码机制以及原先不需要代理对的六万三千多个基本 Unicode 码,合起来叫做UTF-16。也就是说UTF-16 基本上就是 Unicode双字节编码的实现,再加上一个应付未来扩充需要的编码机制。
feiyuegaoshan
2003-08-07
打赏
举报
回复
1.“java内部怎么表示世界各国的语言字符?”
这个问题,songbo_pp(皮皮) 已经回答的很好了。
2.“好像有更多位的编码格式,但是怎么放在char里面,系统如何识别它?”
我来回答第二个问题。
char里只存放编码。说直白点就是0x0000-0xFFFF之间的数字。
“系统如何识别它”有两个含义,一是java系统如何识别。二是本地系统如何识别。
java系统不会去识别。他只认识编码。对于特殊编码,java编译器会依据常规来处理,如0x000D表示回车。对于普通数字,java一律看成字符。
本地系统,如linux,win2k,etc,是依靠本地编码原则来识别unicode,所谓识别,就是win2k看到了0x0041后,会在屏幕上显示字母:A,这就叫识别了,如果看到0x4F60,就显示汉族“你”。之所以能显示是因为有对应的模块来做翻译。如果在日文系win2k统里,因为不含有汉字模块的unicode转换,就不会显示汉字了。
这些都叫系统识别。
GeminiFox
2003-08-07
打赏
举报
回复
songbo_pp(皮皮)
高!
9节课征服「字符编码」
ASCII、GB2312、GBK、GB18030
Unicode
、UTF-8、UTF-16、UTF-32
关于序列化,utf
编码格式
和
unicode
编码
1. 编码这些应该是针对字符而言的,整形及数值这些是不需要编码的。因此,无论是硬盘中还是内存中,虽然存的都是二进制码,但是字符的编码方式可以是utf9,
unicode
等等。 2. 序列化只是一种将对象写入字节流的方法而已。可以自己去定义对象的拆分和组装,对象中的字符,写入字节流时,可以选择编码方式,其他的数值型的话,可以直接序列化。 参考例子: Java code
字节数组解
Unicode
字符串
这段时间遇到一个问题是需要遇到一个BinaryReader(里面可能塞了各种数据),需要从当前位置读取一个字符串,当然可能可能包括各种符号,可以理解成要读一个byte[]截取一个字符串,如果我们不加过滤的一律都塞到串,然后解码,结果很容易出现乱码。虽然提供这个字节流的官方中声明了“字符串以
Unicode
编码”的,但是由于以前对编码知识了解并并不多,所以看到这个声明的时候,我开始是忽略的!o(╯□╰)
gbk/utf8/
unicode
编码转换,不依赖任何系统API自己实现与平台无关的转换算法
原文链接(http://blog.csdn.net/coollofty/article/details/8058859) GBK、UTF8、
Unicode
,这三种编码是一般程序开发,或者各种应用中最常见的三种编码方式了,还不知道基本概念的赶快
请教
搜索引擎自己科普一下。 本文的目的不是来讲述什么是GBK编码,什么是UTF8编码,他们的编码规则是怎样的这一类的基本概
一图看懂 Python 2 / Python 3 编码 | CSDN 博文精选
作者| 天元浪子 责编 | 刘静 出品 | CSDN博客 无论是PY2还是PY3,都使用
Unicode
作为内存编码,简称内码。保存在Python解释器内存中的文本,输出到屏幕、编辑器,或者保存成文件的时候,都要将内码转换成UTF8或者GBK等
编码格式
;同样,Python解释器从输入设备接收文本,或者从文件读取文本的时候,都要将UTF8或者GBK等编码转换成
Unicode
编码格式
。因...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章