Programming 板


LINE

※ [本文转录自 C_and_CPP 看板 #1KuD_w8l ] 作者: LPH66 (1597463007) 看板: C_and_CPP 标题: [讨论] Unicode (was: [问题] gcc对非英文 时间: Mon Feb 16 02:05:42 2015 应该已经偏版题很多了, 不过还是提一下我所知的资料 (本文同步转录 Programming 版) : → uranusjr: UTF-8 也只有保证「目前」可以表示所有 Unicode 字元 XD 02/15 20:36 : → uranusjr: 尤其现在的 UTF-8 规范把上限下修到 4 bytes, 总有一天 02/15 20:38 : → uranusjr: 还是会用完, 到时候再看看他们打算怎麽办 02/15 20:38 : → PkmX: UTF-8 4bytes可以表示到U+10FFFF (17 * 2^16 = 1114112) 02/15 20:50 : → PkmX: Unicode 7.0也才定义113021个codepoints 要用完应该还很久XD 02/15 20:51 : → PkmX: 就算17个planes真的用完 UTF8照规律也可以延伸到使用5 bytes 02/15 20:55 : → frankhsu421: 顺带一提 这code在真的linux上跑会runtime error 02/15 21:09 : → frankhsu421: linux上uintmax_t没有比wchar_t大 02/15 21:10 : 推 LPH66: UTF-8 下修的原因是 Unicode 本来就定到 U+10FFFF 而已 02/15 21:17 : → LPH66: UTF-8 4byte 其实可以表示到 0x1FFFFF (32*2^16-1=2097151) 02/15 21:18 : → LPH66: 而 Unicode 只定到那里的原因是 UTF-16 的 surrogate pairs 02/15 21:18 : → LPH66: surrogate pairs 的最後一个组合 U+DBFF U+DFFF 表示的 02/15 21:19 : → LPH66: 就是 U+10FFFF 再上去的话 surrogate pairs 就不够了 02/15 21:19 : → uranusjr: 那是 UTF-16 的上限, Unicode code point 是无极限的 02/15 21:56 Unicode 最早最早是只有到 U+FFFF 的 (维基百科上有引用 Unicode 创立者之一 Joe Becker 在 1988 年发表的草稿文字 说是他当时认为 2^14 = 16384 个字应该够用了 因此将 Unicode 定为一个 16-bit 编码) 後来跟 ISO/IEC 10646 的合流才有把字码表延伸出去的想法 (ISO/IEC 10646 是订成一个 31-bit 编码 它的其中一个表示法 UCS-4 即是用一个 32-bit 整数去装这个编码) 也因此到了 1996 年的 2.0 才新增了 surrogate pairs 的机制表示 U+10000 以後的字 而这个 surrogate pairs 的自然上限即是 0x10FFFF 所以要说那是 UTF-16 的上限也没错, 因为 Unicode 原本就是个 16-bit 编码 之所以有"限定"下来一说可能是跟 ISO/IEC 10646 搞混了 因为被限定的其实是这个原本是 31-bit 编码的 ISO/IEC 10646 因为跟 Unicode 合流的关系才把自己的字码范围限在 0x10FFFF 以内 (这个"限制"应该不是明文限制, 只是两边的标准组织讲好这样 注意到虽然我上面说合流, 不过那只是共同制定字码相容的标准而已 Unicode 跟 ISO/IEC 10646 还是两个标准; Unicode 多了许多字元显示上的规定) === UTF-8 最早当它在一张餐巾纸的背面被写下来时 它的目标编码其实是 ISO/IEC 10646, 也就是那个 31-bit 的大编码 因此在 1993 年初它发表的时候, 一个字最多可以表示成 6 byte 是到了 Unicode 跟 ISO/IEC 10646 合流有了 U+10FFFF 的限制之後 才有了 RFC 3629 这一条 RFC 把 UTF-8 限制在 U+10FFFF 以下 (也就是说, 实际上是因为 ISO/IEC 10646 自我限定字码才有 RFC 3629 限定 UTF-8 而不是因为 UTF-8 定了限制才让字码限定在 U+10FFFF 的 RFC 3629 是 2003 年订定的, 那时已经是 Unicode 4.0 了) UTF-8 限定在 4-byte 以内是这个 RFC 的自然结果 而且也不是任意 UTF-8 的 4-byte 顺序都是合法的 如我上面推文所说, UTF-8 的 4-byte 最多可以到 0x1FFFFF RFC 3629 规定这段范围里超过 0x10FFFF 的都是不合法编码 === 所以如果万一真的用完了要延伸的话 应该会沿着 ISO/IEC 10646 原先定义的方向下去延伸 问题只有 Unicode 这边要怎麽延伸字码表示而已 UTF-8 倒是不必担心, 原先的设计就足够用到 31-bit (到时大概会有另一个 RFC 出来说取代 RFC 3629 这样) === 至於现在 Unicode 里定了多少字? Plane 0 BMP (U+0000~U+FFFF) 虽然还有一点点空位, 基本上可以算是满了 Plane 1 SMP (U+10000~U+1FFFF) 包含一些古代语言(eg.线型文字)跟哩哩扣扣的符号 大概只用掉这块的两成不到 Plane 2 SIP (U+20000~U+2FFFF) 包含古中文字、罕用中文字 这块使用率目前还不错, 已经用掉超过七成 很多罕用字大都能在 Ext.B (U+20000~U+2A6DF) 里面找得到 Plane 3 预计是要留给像甲骨文、金文、小篆之类的字 不过现在 (as of Unicode 7.0) 还是空空的就是了 Plane 4~13 现在还是杂草一片 Plane 14 只有定义了大概百来个控制字元 Plane 15~16 则是更大一块的 private use area (约有十三万个字的空间的造字区) 所以其实这一百多万个字码要用完个人觉得还很久就是了 而且 Unicode 在定字时其实多少会简单分析一下到底基本的"字"是什麽 所以字码并不会太过膨胀 (可以看印度文就知道) 相对的最占空间的字就是做的没有这麽彻底的中文字 不过就算这样, SIP 现在也才填了个七成而已, 要到占满所有字码真的还早 -- 'You've sort of made up for it tonight,' said Harry. 'Getting the sword. Finishing the Horcrux. Saving my life.' 'That makes me sound a lot cooler then I was,' Ron mumbled. 'Stuff like that always sounds cooler then it really was,' said Harry. 'I've been trying to tell you that for years.' -- Harry Potter and the Deathly Hollows, P.308 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.39.85
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1424023546.A.22F.html



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: LPH66 (123.195.39.85), 02/16/2015 02:06:10
1F:推 AmosYang: 推整理 orz 68.4.115.53 02/16 03:11
2F:推 alibuda174: 推整理 赞 118.168.45.60 02/16 08:33
3F:推 carylorrk: 记得几年前光是爲了判定 CJK 就翻了好 1.34.244.41 02/16 09:41
4F:→ carylorrk: 久XD 1.34.244.41 02/16 09:41
5F:推 abcdefghi: 担心字码被用完真的有点杞人忧天, 原始 114.44.189.196 02/16 10:50
6F:→ abcdefghi: 的16bit不够用,就跟10646整合,一样叫 114.44.189.196 02/16 10:51
7F:→ abcdefghi: unicode,未来找到外星人和宇宙接轨,再 114.44.189.196 02/16 10:51
8F:→ abcdefghi: 定个64bit/128bit的版本就好了,连 114.44.189.196 02/16 10:52
9F:→ abcdefghi: regional indicator symbol都会出现, 114.44.189.196 02/16 10:53
10F:→ abcdefghi: 所谓的规格/标准,只是大厂愿不愿意支持 114.44.189.196 02/16 10:53
11F:→ MOONRAKER: 外星人的bit会不会比地球人的大8倍 >_< 61.221.51.43 02/16 16:58
12F:推 azureblaze: 外星人会不会用medium-endian 220.134.245.97 02/17 00:50
13F:推 monoceros629: 真是很认真的了解unicode 175.96.109.100 02/19 09:36
14F:→ MOONRAKER: 连endian都不一样真是糟透了 XP 122.116.43.189 02/21 23:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP