字符编码:ASCII编码、地区编码 、Unicode (UTF-8)

一、字符集&编码

  • 字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

  • 字符编码(Character Encoding):在符号集合与数字系统之间建立对应关系,字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。【charmap】

二、ASCII字符集&编码

ASCII:American Standard Code for Information Interchange

目前ASCII码一共规定了128个字符的编码,小于32是控制字符(或者叫不可打印字符),32-127是可打印字符(比如32是空格,65是A),高于128并没有用。

1个字节是8bit,因此人们想用128-255表示些其他字符。这样做可以,但是若很多人想这么做会导致问题。比如有些pc认为130是é,而卖给Israel 的则pc认为130是λ,从而信息不能正确的理解。

其中做法的字符编码OEM被列入ANSI标准,0-127是ASCII码,128-255依据不同的位置,有不同的编码方式,叫做code page。比如Israel DOS的code page是862,Greek 是737。

但是像中文成千上万字符,还是个问题,由Unicode解决。

三、国家字符集及编码(地区编码)

为了让本国公民也能使用上计算机,各个国家(地区)也开始效仿 ASCII,开发了自己的字符编码。这些字符编码和 ASCII 一样,只考虑本国的语言文化,不兼容其它国家的文字。

  • GB 2312 is a key official character set of the People’s Republic of China, used for simplified Chinese characters.
  • GBK is an extension of the GB2312 character set for simplified Chinese characters, used in the People’s Republic of China. (Guobiao standards KUOZHAN)

这样做的后果就是,一台计算机上必须安装多套字符编码,否则就不能正确地跨国传递数据,例如在中国编写的文本文件,拿到日本的电脑上就无法打开,或者打开后是一堆乱码。

四、Unicode字符集(统一码、万国码)

已存在的任何国家的字符,每个字符都有一个独一无二的编码,叫做magic number(或者code point)。
U+0639 :U+指Unicode,0639是十六进制数
需要注意的是Unicode只是规定了字符二进制编码,但没规定如何存储(即需要几个字节)。有的需要3个字节而有的只需要1个字节,若统一规定字节数,则会造成大量的浪费。

Unicode 已经是大势所趋。开发自己的软件时也应该尽量使用 Unicode,这样不但支持全球的计算机,还能提高字符处理效率,因为少了编码转换的环节。

五、Unicode字符集的编码(Encodings)

为了让Unicode在计算机存储,从而有了Encodings。

1.UTF-8

UTF:Unicode Transformation Format。is an algorithmic mapping from every Unicode code point (except surrogate code points) to a unique byte sequence.

UTF-8是Unicode的一种实现方式。
特点是变长的编码方式,它使用1~4个字节表示一个字符,根据不同的字符而变化字节长度。
UTF-8 的编码规则很简单,只有二条:

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
  • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
  • 最多6字节
    在这里插入图片描述

跟据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
在这里插入图片描述

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

UTF-8最少8bit(一个字节);UTF-16最少16bit(2个字节)

2.UCS-2

UCS:Universal Character Set 定长编码方式 2字节。
UCS-2 格式可以存储 Unicode 码(码点不超过0xFFFF)。以汉字严为例,Unicode 码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,这就是 Big endian 方式;25在前,4E在后,这是 Little endian 方式。

参考:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值