Dark Corners of Unicode (2015)
6 months ago
- #programming
- #text-rendering
- #unicode
- Unicode是一个旨在表示所有人类语言的复杂系统,但即便是程序员也常对其存在误解。
- Unicode包含ASCII之外的字符(如表情符号),并使用码位(codepoints)来表示它们。
- UTF-8是一种能表示所有Unicode码位的编码,而ASCII仅限128个字符。
- Unicode字符可由多个码位组成,例如组合变音符号或表情符号序列。
- 由于语言特定规则和规范化问题,Unicode文本的排序和比较并非易事。
- Unicode规范化可以分解字符,但并不能解决所有问题,尤其是非拉丁文字。
- 终端和字体对Unicode字符(尤其是表情符号和组合字符)的渲染可能不一致。
- JavaScript等语言在处理Unicode时存在局限,特别是辅助平面字符(astral plane)。
- MySQL的'utf8'编码每字符仅限3字节,导致辅助平面字符出现问题。
- 表情符号并非正式的Unicode区块,而是分散在不同区块中并由使用习惯定义。
- Unicode包含许多有趣而冷门的字符,从控制符图形到炼金术符号应有尽有。