你知道 "你" 不是 "你" 吗?

2017-01-20 11:58:44 +08:00
 iugo
"你" 的 Unicode code point 是十进制的 194564.
"你" 的 Unicode code point 是十进制的 20320.

前者属于 cjk compatibility ideograph.
后者属于 cjk unified ideograph.

我们一般使用后者, 但前者也存在, (根据维基百科)前者存在的意义在于 "字源分离原则".

P.S. 我对编码的认识还真是浅. 有待学习和提高.
10579 次点击
所在节点    程序员
83 条回复
Yvette
2017-01-20 13:08:56 +08:00
我不认识「你」怎么写了
Lelouchcr
2017-01-20 13:17:44 +08:00
```
列 列
女 女
老 老
里 里
```

我也踩过坑, unicode 的区块是 84308130 - 8430A330
imn1
2017-01-20 13:22:01 +08:00
怪不得那么多部门都要你自证身份, 2333



你 你
侮 侮
內 内
抱 抱
……
这些字多的是,在 Unicode 的命名是
CJK Compatibility Ideographs Supplement
Range: 2F800 – 2FA1F
The Unicode Standard 3.1

这个看电脑字体用的是什么,像#12 用的字体可能就能看清两个字写法是不同的
loading
2017-01-20 13:25:33 +08:00
昨天刚看了一次 utf8,cjk 字体有一些是这样的。
chocotan
2017-01-20 13:26:44 +08:00
完蛋了,我也不认识你怎么写了。。
irainsoft
2017-01-20 13:31:49 +08:00
Windows+Chrome 感觉标题里两个字略有不同一直盯着看 现在已经不认识这个字了
xrxsh
2017-01-20 13:32:16 +08:00
@chocotan 看了一会已经完全不知道“你”是什么字了
arischow
2017-01-20 13:35:52 +08:00
21grams
2017-01-20 13:39:10 +08:00
这有什么稀奇, unicode 里一样的字多如牛毛。
lybtongji
2017-01-20 14:05:09 +08:00
看来有个好字体很重要
codehz
2017-01-20 14:11:11 +08:00
正确的渲染应该会映射到同一个字形上去的。。。上面字体显示不一致的估计是 fallback 的问题,直接按照区间进行划分了
caoz
2017-01-20 14:33:13 +08:00
貌似发现一个 bug, Firefox on Mac, 在浏览器中显示没问题, 闲着没事复制到 Python 中想试一下, 结果...



复制后字竟然变了... 换用其他浏览器复制字不会变, 你们可以试下. 应该不是扩展的问题, 新建了个 Profile 也是这样...
cppgohan
2017-01-20 14:34:05 +08:00
有一些简繁体, 字模差异非常小, 但是其实是两个字
iugo
2017-01-20 14:36:06 +08:00
@21grams 因为我之前对 Unicode 的编码规范认识比较少, 所以刚开始看到 你 使用了两种编码有些好奇: 同一个字为何要使用两种或以上编码?

所以更深入了解了一下常用的 CJK Unified Ideographs 和作为补充的 CJK Compatibility Ideographs Supplement. 然后去 unicode.org 找了一些资料进一步了解, 比如 http://unicode.org/charts/PDF/U2F800.pdf

分享一下, 或许对一些朋友有帮助.
Akarin
2017-01-20 14:41:44 +08:00
![screen shot 2017-01-20 at 14 40 21]( https://cloud.githubusercontent.com/assets/7829098/22138993/7734d4a8-df1e-11e6-86b0-b7782d1e7230.png)

看多了这个字,会突然不认识的。
SkYouth
2017-01-20 14:58:16 +08:00
假的我
SourceMan
2017-01-20 15:00:37 +08:00

少了一个勾
Sylv
2017-01-20 15:02:01 +08:00
Unicode 里很多长一样的,再举个例子( Python 2 代码):

é 的 Unicode 是 u'\xe9':
>>> print u'\xe9'
é

但其实也可以表示成 u'\u0065\u0301':
>>> print u'\u0065\u0301'
é

后者相当于字母 e (u'\u0065') + 音符 ́ (u'\u0301'):
>>> print u'\u0065'
e
>>> print u'\u0301'
́

不过两者其实在 Unicode 中是等价的,可以将后者正规化为前者:
>>> import unicodedata
>>> unicodedata.normalize('NFC', u'\u0065\u0301')
u'\xe9'


扩展阅读:
https://zh.wikipedia.org/wiki/Unicode 等價性
Sylv
2017-01-20 15:07:24 +08:00
@Sylv 呃, V2EX 不支持链接中有中文,补个编码后的链接:
https://zh.wikipedia.org/zh-cn/Unicode%E7%AD%89%E4%BB%B7%E6%80%A7
xycool
2017-01-20 15:18:39 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/335808

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX