随笔(关于Unicode 及 Unicode Consortium)

定义:

  • Unicode( 统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的 二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
    uico.jpg

字符与编码 Characters and Encoding

  • 将人类自然语言的书写文字符号转换成数字机器能处理的“0”和“1”需要编码(Encoding)。
    把语言的字符集成,制定出字符集(CharacterSets)通常是国家政府或产业界制定出来的,着名的例子如中国的国家标准GB-2312丶繁体/正体字早期的业界标准Big5丶香港政府制定的香港增补字符集 HKSCS等等。
    由於各种字符集的标准不一,若有冲突的编码定义则不同语言文字符号无法在同一文件中出现,需要额外做转换。如中文简体字早期标准GB-2312和繁体/正体字早期标准Big5是不相容的,不但需要额外转换,这两种标准的文字是无法同时出现在一份文件里。

此外,由於编码之间的相容性及应用程序如浏览器的支援不一,会发生编码错误以致显示内容不正确,又称乱码(Mojibake),或甚致是安全漏洞。

Unicode标准与世界语言

  • Unicode标准所支援的世界书写语言详列於官方网站之Supported Scripts页面,中日韩共用的汉字(Han)早在1993年第1.1版已纳入。
    由於字符数及编码的特性,由Mark Davis所做的统计来看,Unicode标准中字符数占最多的是中国,占了7成以上,韩国次之占1成多。
64a3a9e580bcdcc1b7e52475e271722.png

Unicode CLDR数据库存有不少数据,可以使用XML或JSON格式取用,用於网站/软件的在地化(L10N, Localiation)及全球化(i18n, Internationalization)。

此外,CLDR亦有地域-语言表,Territory Language Information,详列Unicode 用户贡献但经专家审批的各地域之语言人口侧写。

Unicode标准统一编码的基础设施

  • 为解决编码交换等问题,为所有文本(在互联网和所有设备上)提供了基础设施。这基础设施的工作包括两部分:

其一为为文本中使用的每个字符提供一个数字,而Unicode标准是这些数字的字典。
其二是协助设备处理世界上所有的语言,因而联盟维护一大数据库,为不同的语言和国家提供的术语和格式 (Unicode, 2017)。此数据库名叫CLDR (Common Locale Data Repository),中译为「通用区域资料库」

unicode格式

  • Unicode是一种可能的宽字符集。由 Unicode 协会开发的能表示几乎世界上所有书写语言的字符编码标准。Unicode 字符清单有多种代表形式,包括 UTF-8、UTF-16 和 UTF-32。大多 Windows 界面使用 UTF-16。
    Unicode 传输格式 8 (UTF-8)
    在 ASCII 码基础上发展的协议字符设置。UTF-8 协议提供 ASCII 码的扩展支持,UCS-2 码的翻译,国际 16 进制 Unicode 编码字符设置。与使用字符数据的 ASCII 或扩展 ASCII 编码相比,UTF-8 可获得更大范围的名称。
  • Unicode 字符系统 (UCS)
    作为 Unicode 标准一部分的国际标准字符集参考。现在广泛使用的 UCS 标准的版本是 UCS-2,该版本指定的 16 位字符数值已作为世界上大多数语言的编码标准而被接受,并得到了承认。
    直接选unicode就可以了。
    如果没有特殊字符,ansi保存也没事。

Unicode 的常见表达形式

  • 一般而言,Unicode编码的书写表达形式以U+开头,接16进制符,如Unicode的笑脸😀:
U+1F600

Unicode列表时如Unicode 5.0的全部表情符号都采取这种编码书写方式
URL在编码时,会把非ASCII字符及一些保留字符做转换,加以%符号以16进制符表示,如:

%F0%9F%98%80

(URL编码工具可用URL Decoder/EncoderATOOL

Unicode 与 Emoji

表情符号(Emoji)是一种象形文字 (图案符号),常在数字文本中使用来代表面孔丶天气丶车辆和建筑物丶食物和饮料丶动物和植物, 或代表情绪丶感觉或活动的图标,通常以丰富多彩的形式呈现。全球有近90%人口使用表情符号。


296ef7b1a65d8e8dbb658f05ff150f5.png

Unicode Emoji的支援需要厂商提供对映的Unicode 字型,如[非礼勿视猴(See-No-Evil Monkey)的表情符号]🙈(https://emojipedia.org/see-no-evil-monkey/),就有多种厂商提供。
另外,如2017年Google Android 8.0有支援不同姓别及肤色的人物表情包。

性别政治

  • 为了促进性别平等,2016年Unicode 的Emoji委员会同意加入11个表情符号,可以搭配不同的姓别及肤色,排列组合可以产出百多馀的表情符号(Bleuel, 2016)


    bde7d992ead7aeb440f8f1cb925594b.png

在缅甸的罗兴亚人

  • 2017年底,Unicode联盟考虑编码“Hanifi Rohingya”的书写系统,是二十世纪八十年代为罗兴亚人开发的书写系统,罗兴亚人在之前并无通用的书面文字(Agence France-Presse, 2017)。
  • 尽管许多罗兴亚人在缅甸遭受与种族清洗相似的压迫时,缺乏识字和获取信息技术的机会,一套数字化字符集可以让罗兴亚人用自己的语言使用社交媒体,发送短信,写电子邮件等等。 但这一举措将产生重大的象征性后果。

Unicode在东亚

->Unicode发展史上,一个重要的挑战和里程碑是统一汉字(Unihan)。

Unihan的早期发展涉及中日韩三种语言所用的汉字,又称CJK,後期以有越南用的汉字加入,称CJKV。
统一汉字的特点在于,如是几种语言共享的符号且经同意,是共享同一编码,专用的汉字则否。

  • 从多语互联网的角度,Unicode支持东亚主要的语言是互联网国际化的重要里程碑。日本科学技术与社会学者学者中山茂(Nakayama Shigeru)认为:
    东亚人习惯于处理多字节系统, 对比西方 单字节文化来说。对处理复杂系统来说, 我们东亚的多字节文化将在未来被证明是有优势的(p. 12)。
  • 参考文献:https://note.youdao.com/share/?token=15FEDD32D25B4083BFF2193C8C6364F3&gid=59950065
    u.jpg

字集

  • XML及其子集 HTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的 网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。
  • 然而部分由于Unicode 版本发展原因,很多浏览器只能显示UCS-2 完整 字符集也即日常使用的Unicode 版本中的一个小子集。

使用:

  • 为什么使用Unicode?

因为Unicode比ANSI好用。 自从Windows2K开始,Win的系统内核开始完全支持并完全应用Unicode编写,所有ANSI字符在进入底层前,都会被相应的API转换成Unicode。所以,如果你一开始就使用Unicode,则可以减少转换的用时和RAM开销。 对于JAVA/.NET等这些“新”的语言来说,内置的字符串所使用的字符集已经完全是Unicode。最重要的是,世界上大多数程序用的字符集都是Unicode,因为Unicode有利于程序国际化和标准化。
链接:https://www.zhihu.com/question/23374078/answer/24385963

Unicode 和 UTF-8 有何区别?

  • 简单来说:

UTF-8 是对Unicode编码的一种编码方式。
原因:节省流量和硬盘
Unicode 是「字符集」UTF-8 是「编码规则」其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

  • 广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:U+ 0000 ~ U+ 007F: 0XXXXXXX
    U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
    U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
    U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
    根据上表中的编码规则,之前的「知」字的码位 U+77E5 属于第三行的范围: 7 7 E 5
    0111 0111 1110 0101 二进制的 77E5

0111   011111   100101 二进制的 77E5

1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
E 7 9 F A 5
这就是将 U+77E5 按照 UTF-8 编码为字节序列 E79FA5 的过程。反之亦然

为什幺要使用Unicode?

(1) 可以很容易地在不同语言之间进行数据交换。
(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。
(3) 提高应用程序的运行效率。

  • Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那幺系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。


    unicode1.jpg

如何编写Unicode源代码?

  • Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使用Unicode来对它进行编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。

Unicode和DBCS之间的区别

  • Unicode使用(特别在C程序设计语言环境里)“宽字符集”。「Unicode中的每个字符都是16位宽而不是8位宽。」在Unicode中,没有单单使用8位数值的意义存在。相比之下,在“双位组字符集”中我们仍然处理8位数值。有些位组自身定义字符,而某些位组则显示需要和另一个位组共同定义一个字符。
  • 处理DBCS字符串非常杂乱,但是处理Unicode文字则像处理有秩序的文字。您也许会高兴地知道前128个Unicode字符(16位代码从0x0000到0x007F)就是ASCII字符,而接下来的128个Unicode字符(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。Unicode的最大好处是这里只有一个字符集,没有一点含糊。
  • 参考文献:浅谈在window系统下的Unicode

Unicode的漏洞

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容