Unicode编码 - 基础
什么是Unicode编码?
Unicode是字符编码规范,它定义了所有文字的编码规则。说通俗点就是它按照某个规则给每个字符都分配了一个数字编号(比如:'A'的编号为65或0x0041,'万'的编号为19981或0x4e0d),相当于是一个编号库。这个数字编号也叫Unicode码。最开始这个编号使用2个字节表示(0x0000~0xFFFF),后来发现不够又扩展到4个字节(扩展出的部分:0x10000~0x10FFFF)。
和utf-8编码的区别是啥?
Unicode只是一个标准,通过它我们可以获取到字符的编号(Unicode码),而这个编号如何存储,它并没有定义。而这个正是utf-8编码做的事,它是建立在Unicode编码基础上,定义了Unicode码的存储规范。
比如:'A'的编号为65或0x0041,utf-8会保存为1个字节:0x41,这样就可以节省一半的存储空间。
一些常见的Unicode编码范围
0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)
0100-017F:拉丁文扩展-A (Latin Extended-A)
0180-024F:拉丁文扩展-B (Latin Extended-B)
0250-02AF:国际音标扩展 (IPA Extensions)
02B0-02FF:空白修饰字母 (Spacing Modifiers)
0370-03FF:希腊文及科普特文 (Greek and Coptic)
0400-04FF:西里尔字母 (Cyrillic)
1E00-1EFF:拉丁文扩充附加 (Latin Extended Additional)
2000-206F:常用标点 (General Punctuation)
2070-209F:上标及下标 (Superscripts and Subscripts)
20A0-20CF:货币符号 (Currency Symbols)
20D0-20FF:组合用记号 (Combining Diacritics Marks for Symbols)
2100-214F:字母式符号 (Letterlike Symbols)
2150-218F:数字形式 (Number Form)
2190-21FF:箭头 (Arrows)
2200-22FF:数学运算符 (Mathematical Operator)
2300-23FF:杂项工业符号 (Miscellaneous Technical)
2460-24FF:封闭式字母数字 (Enclosed Alphanumerics)
2500-257F:制表符 (Box Drawing)
2580-259F:方块元素 (Block Element)
25A0-25FF:几何图形 (Geometric Shapes)
2600-26FF:杂项符号 (Miscellaneous Symbols)
2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement)
2F00-2FDF:康熙字典部首 (Kangxi Radicals)
2FF0-2FFF:表意文字描述符 (Ideographic Description Characters)
3000-303F:CJK 符号和标点 (CJK Symbols and Punctuation)
3040-309F:日文平假名 (Hiragana)
30A0-30FF:日文片假名 (Katakana)
3100-312F:注音字母 (Bopomofo)
3190-319F:象形字注释标志 (Kanbun)
31A0-31BF:注音字母扩展 (Bopomofo Extended)
31C0-31EF:CJK 笔画 (CJK Strokes)
31F0-31FF:日文片假名语音扩展 (Katakana Phonetic Extensions)
3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months)
3300-33FF:CJK 兼容 (CJK Compatibility)
3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)
4E00-9FFF:CJK 统一表意符号 (CJK Unified Ideographs)
F900-FAFF:CJK 兼容象形文字 (CJK Compatibility Ideographs)
FE10-FE1F:竖排形式 (Vertical Forms)
FE30-FE4F:CJK 兼容形式 (CJK Compatibility Forms)
D800-DBFF:给UTF-16用的代理高半区(High-half zone of UTF-16)
DC00-DFFF:给UTF-16用的代理低半区(Low-half zone of UTF-16)
E000-F8FF:自行使用区域 (Private Use Zone)
FFF0-FFFF:特殊 (Specials)
上面的红色部分为在中国用的比较多的字符,蓝色部分是日文的字符
专业名词解释:
Ideographs:表意文字,也叫象形文字
CJK:中日韩
要查看各个Unicode编码范围的字符信息,可以使用BMFont,BMFont - AngelCode.com
遍历及打印基本平面的所有字符
public class UnicodeTest : MonoBehaviour { void Start() { StartCoroutine(PrintBMPChars()); } IEnumerator PrintBMPChars() { var sb = new StringBuilder(); for (ushort codePoint = 0x0000; codePoint <= 0xffff; ++codePoint) { if (char.IsSurrogate((char)codePoint)) { //代理码点区, 不对应任何字符 } else { string s = char.ConvertFromUtf32(codePoint); sb.Append(s); if (sb.Length >= 200) { Debug.Log($"{sb.ToString()}"); sb.Clear(); yield return null; } } } } }
部分运行结果
参考
utf8,utf16,utf32,bom详解(转) - 宏2018 - 博客园 (cnblogs.com)
各种语系的unicode对应以及local编码方式 - YoZane - 博客园 (cnblogs.com)
Unicode 中文,日文,西欧语言Unicode编码域(区间)_日文unicode范围-CSDN博客