【字符集及字符编码】UTF-8、UTF-16和UTF-32

UTF-32 用 4 个字节存储每一个字符,以保证能把 UCS 完全表达出来。但实际上 UCS 的字符数量根本不需要用 32 位表示,UTF-32 极大地浪费了空间。另外,由于组合字符的存在,定长表示并不能如预期那样迅速地定位字符,反正就是超级不好用。

UTF-16 将 UCS 映射为 16 长的整数,用于数据存储或传输。UCS 的码位,需要 1 个或 2 个 16 位的码来表示,因此这是一个变长表示。另外,UTF-16 也需要指定字节序。Java 和 C# 里的字符串表示就是用的 UTF-16 编码,从而它们的 char 类型跟 short 类型都是 16 位的,需要另外添加一个 byte 类型来表示 8 位字节。

UTF-8 也是一个可变长度字符编码,它同时是一个前缀码,前缀码的特征是,编码系统中的任意一个合法的码不会是另外一个码的前缀,所以 UTF-8 不需要指定字节序。一个 UTF-8 编码可以用 1~6 个字节来表示,将第一个字节的前几个比特设置为 1 来指定这个字符占用几个比特,比如一个两字节的字符的编码,第一位是 110xxxxx,第二位是 10xxxxxx,而一个六字节字符的编码是这样的:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx,所以 UTF-8 最多能编码 231 个字符。

时间: 2024-10-13 17:38:06

【字符集及字符编码】UTF-8、UTF-16和UTF-32的相关文章

刨根究底字符编码之十——Unicode字符集的字符编码方式CEF以及码点、码元

Unicode字符集的字符编码方式CEF以及码点.码元 一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大,有些字符的编号(码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两个或两个以上字节. 比如,汉字"严"的Unicode码(Unicode码点值.Unicode编号)是十六进制数4E25,转换成二进制数有15位(100 1110 0010 0101),对"严"这个字符的编号进行编码的话,至少需要2个字节.表示其他更大编号

字符,字符集,字符编码

字符,字符集,字符编码 简书郭文圣 现在Unicode已然一统天下,我想很多年轻的程序员可能都没遇到过编码问题,更不用说了解编码的发展了.前些日子在一个老网站上偶遇乱码,虽然入行时间不短,但对其究竟也是不甚了解,好奇心驱使下落入深坑.还好经过一段时间的摸爬滚打,边学边写,总算大概理清了个脉络,记录之,分享之. 概念 字符是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英文字母是一个字符,一个阿拉伯数字是一个字符,一个标点符号也是一个字符. 字符集是字符组成的集合,通常以二维表的形式存在

字符集与字符编码的强化理解与操作实践

字符集与字符编码的强化理解与操作实践 踩坑 最近在工作中遇到了一个说大不大说小不小的问题,就是当我解析一个xml文件的时候,抛出了一个"Invalid byte 2 of 2-byte UTF-8 sequence"的异常,这个异常会导致解析直接退出,显然不能容忍.查阅相关资料稍微定位了一下,大概知道是字符集的问题,仔细一看,xml文件中的确有中文字符,而且当我把这些中文字符删了之后的确又能解析成功.不过我还是不能理解这当中的缘由,不过由于时间原因,当时只是把中文字符删了就草草完工.现

搞定字符集与字符编码

1.什么是字符集? 字符:文字.符号.包含各个国家文字.标点符号,图形,数字等 字符集:多个字符的集合(多个文字.符号的集合),不同字符集包含的字符个数不同. 2.什么是字符编码? 字符编码:字符集只字符的集合,不适用于网络传输,计算机想准确处理及向硬盘存储各种字符集中的文字.符号,需要经过字符编码,010101的组合对应哪种字符集中的哪些文字,字符编码就是将文字与符号转换为计算机可以接受的数字用于存储与网络传送,就叫字符编码. 简单的说,字符编码就是以二进制的数字来对应字符集中的字符.对字符进

每一个程序员必须掌握的知识,字符集与字符编码.

1. 基础知识 计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码":反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密.在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码. 字符集(Charset):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符

几种常见字符集与字符编码

字符集的概念 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 而字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同. 常用字符集 ASCII字符集.GB2312字符集.GBK字符集. USC-3字符集.Unicode字符集等. 字符编码的概念 字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式.自然数序列.8位组或者电脉冲),以

字符集与字符编码

[转]字符集和字符编码(Charset & Encoding)----谢谢博主 --每个软件开发人员应该无条件掌握的知识! --Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-Language等消息头字段?这些就是接下来

字符集、字符编码总结

字符集(Charset):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符编码:是一套规则,将字符和二进制数据建立映射关系. 按照出现的时间: 1.ASCLL(American Standard Code for Information Interchange):它包含一个字节,128个字符: 2.EASCLL:包含256个字符,它是对ASCALL的扩展. 3.ISO-8859:计算机传到欧洲之后,之前的字符集不够使用了,国际标准

字符集与字符编码详解

字符 字符和字节不太一样,任何一个文字或符号都是一个字符,但是所占字节不一定,不同的编码导致一个字符所占的内存不同. 例如:标点符号"+"是一个字符,汉字"我们"是两个字符,在GBK编码中一个汉字占2个字节,在UTF-8编码中一个汉字占3个字节. 随着时代的发展,程序员们希望在计算机中显示字符,但计算机只能识别0和1的二进制数.于是就有了编码规范. 编码规范 所谓的字符集其实是一套编码规范中的子概念,为了显示字符,国际组织就指定了编码规范,希望使用不同的二进制数来表

(转)字符集与字符编码

转载自:http://blog.sina.com.cn/s/blog_5e4814ec01014prk.html 从第一次开始写web程序,自己还有身边同事开发出现乱码情况基本都没有消停过.估计以后还会一样继续.这么些年,不断修修改改,也总结也归纳.程序从asp,asp.net,jsp,php,服务器从windows到linux,数据库也从sqlserver,mysql到oracle:它还是偶尔会出现.好了,我总结下我与它较量的一些收获吧.乱码都与字符集有关系,一切都从它开始说. 什么是字符集,