字符集和编码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单字符集

• •
按照惯例,人们认为字符集和字符编码是同义词, 因为使用同样的标准来定 义提供什么字符并且这些字符如何编码到一系列的代码单元(通常一个字符 一个单元) 例如最初的ascii , iso8859 系列 iso8859-1 属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如, 字母'a'的编码为0x61=97。 很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由 于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使 用iso8859-1编码来表示。而且在很多协议上,默认使用该编码
2.2Window & linux
windows操作系统locale
linux操作系统编码
Codepage 映射(936==gbk,)
字符集和编码
-- by jeffrey yang
• 1、乱码现象 • 2、操作系统字符集解决方案 • 3、unicode 介绍
– 17平面 – UTF8,UTF16,UTF32
• 4、其他编码方式
– Gb系列 – Base64 – URLEncode
• 5、其他
1乱码现象
• � \ufffd. bytes中超出了字符集显示范围,违反了编码规则 的。 对于没有包含�的编码格式的文件将无法保存文件。 例如gbk. • ?及3F 。1、在 Ancii中没有这个字符,那么就会编码成 3F, 2、unicode中没有对应unicode字符。 • [] 符合编码规则, 但是在系统的字符集中目前属于未分 配字符,或没有对应的字符。例如用在部分系统上utf 8显 示emoji. 仅仅是无法正常显示,可保存。 • 其他:鑵鑵, ¢Àï Èöµ©
code unit 的相关述语
• •
• • • •
A character is a minimal unit of text that has semantic value. A character set is a collection of characters that might be used by multiple languages. Example: The Latin character set is used by English and most European languages, though the Greek character set is used only by the Greek language. 以及unicode , gbk等 A coded character set is a character set, where each character is assigned with a unique number. A code point is a value that can be used in a coded character set. A code point is a 32-bit integer data type, where the lower 21 bits represent a valid code point value and the upper 11 bits are 0. A code unit is a bit sequence used to encode each single character unit of a repertoire within each encoding form. Character repertoire (the abstract list of characters)抽象字符集,我们平时表述的: The character repertoire is
an abstract list of more than one million characters found in a wide variety of scripts including Latin, Cyrillic, Chinese, Korean, Japanese, Hebrew, and Aramaic. Other symbols such as musical notation are also included in the character repertoire. Both the Unicode and GB18030 standards have a character repertoire. As new characters are added to one standard, the other standard also adds those characters, to maintain parity.
2、操作系统字符集解决方案
• 2.1、现代编码模型
– Bom – CEF
• 2.2、操作系统编码:windows , linux
– Linux 下的常用配置,命令
2.1现代编码模型
传输编码语法:(transfer encoding syntax),用于处理上一层次的字符编码方案提供的 字节序列。一般其功能包括两种:一是把字节序列的值映射到一套更受限制的值域内, 以满足传输环境的限制,例如Email传输时base64或quoted-printable,都是把8位的字节编 码为7位长的数据;另一是压缩字节序列的值如gzip , LZW等
1.1几个问题
• 1、java 中char 占用几个字节 • 2、Java中字符串
– “a”lenght – “a中” – “a中������” subString 会怎么样
• 3、如果网页传递的参数值中中文是gbk URL encoding 的,而我们系统 的http request 参数解析是utf8格式的如何处理。 • 4、哪些场景的字符编码格式转换,不会导致信息丢失。 • 5、为何标准的utf-8不需要bom,而utf16,utf32 必须。 • 6、内存中字符串出现什么样的乱码后,就不能反转回来了。 • 7、windows 记事本下联通,移动的故事, why • 8、表情符号,什么情况下需要处理吗? • 9、windows 上文本文件保存的unicode 格式,真实格式是什么 • 10、java 哦老系统,经常看到 property 文件上 \uxxxx 的字符,这些文 件是什么格式,为什么这么做?
字符编码方案(CES:Character Encoding Scheme),也称作"serialization format"。 将定长的整型值(即码元)映射到8位字节序列,以便编码后的数据的文件存储或网络传 输。在使用Unicode的场合,使用一个简单的字符来指定字节顺序是大端序或者小端序 (但对于UTF-8来说并不需要专门指明字节序) 字符编码表: (CEF: Character Encoding Form),也称为"storage format“. 是将编码字符集的非负整数值(即抽象的码位)转换成有限比特长度的整型值(称为码 元code units)的序列。 编码字符集 (CCS : Coded Character Set)是将字符集中每个字符映射到1个坐标 抽象字符表 (Abstract character repertoire)是一个系统支持的所有抽象字符的集合,更久远 的是硬件

UTF-16(小端序)
UTF-32(大端序) UTF-32(小端序) GB-18030
Hale Waihona Puke Baidu
FF FE
00 00 FE FF FF FE 00 00 84 31 95 33
255 254
0 0 254 255 255 254 0 0 132 49 149 51
2.1 Character 的相关述语
• 字符编码(character encoding),字符映射(character map),字符集( character set)或者代码页,在历史上往往是同义概念,即字符表( repertoire)中的字符如何编码为码元的流(stream of code units)–通常 每个字符对应单个码元。 • 码元(Code Unit,也称“代码单元”)是指一个已编码的文本中具有最 短的比特组合的单元。对于UTF-8来说,码元是8比特长;对于UTF-16来说 ,码元是16比特长;对于UTF-32来说,码元是32比特长[1]。码值(Code Value)是过时的用法。 • 代码页通常意味着面向字节的编码,但强调是一应用于不能语言的编码 方案的集合.著名的如"Windows"代码页系列,"IBM"/"DOS"代码页系列. • Unix或Linux不使用代码页概念,它们用charmap • 编码空间: encoding space 。简单说就是包含所有字符的表的维度。可以 用一对整数来描述,例如:GB2312汉字编码空间是94 x 94。可以用一个 整数来描述,例如:ISO-8859-1的编码空间是256
2.1字符编码表
storage format
• 这对于定长编码来说是个到自身的映射(null mapping),

但对于变长编码来说,该映射比较复杂,把一些码位映射到一个码元,把另外一些码 位映射到由多个码元组成的序列。例如,使用16比特长的存储单元保存数字信息,系 统每个单元只能够直接表示从0到65,535的数值,但是如果使用多个16位单元就能够表 示更大的整数。这就是CEF的作用,它可以把Unicode从0到140万的码空间范围的每个码 位映射到单个或多个在0到65,5356范围内的码值。最简单的字符编码表就是单纯地选择 足够大的单位,以保证编码字符集中的所有数值能够直接编码(一个码位对应一个码 值)。这对于能够用使用八比特组来表示的编码字符集(如多数传统的非CJK的字符集 编码)是合理的,对于能够使用十六比特来表示的编码字符集(如早期版本的Unicode )来说也足够合理。但是,随着编码字符集的大小增加(例如,现在的Unicode的字符 集至少需要21位才能全部表示),这种直接表示法变得越来越没有效率,并且很难让 现有计算机系统适应更大的码值。因此,许多新近版本Unicode的系统,或者将Unicode 码位对应为可变长度的8位字节序列的UTF-8,或可变长度的16位序列的UTF-16。.

Code unit Size: The code unit size is equivalent to the bit measurement for the particular encoding:
– – – – A code unit in US-ASCII consists of 7 bits; A code unit in UTF-8, EBCDIC and GB18030 consists of 8 bits; 所以utf8字符长度为8个字节的n倍。 A code unit in UTF-16 consists of 16 bits; 所以utf16字符长度为16个字节的n倍。 A code unit in UTF-32 consists of 32 bits.
2.1 serialization format 的实现BOM
• • • •
BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中 用于标识文件是采用哪种格式的编码。 Big Endian高字节在前,低字节在后 和Little Endian低字节在前,高字节在后 UTF8不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节 流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的 。 编码 表示(十六进制) 表示(十进制) UTF-8 UTF-16(大端序) EF BB BF FE FF 239 187 191 254 255
相关文档
最新文档