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 字符集、编码 相关的基本介绍-CSDN博客

各种语系的unicode对应以及local编码方式 - YoZane - 博客园 (cnblogs.com)

Unicode 中文,日文,西欧语言Unicode编码域(区间)_日文unicode范围-CSDN博客

 

posted @ 2024-09-05 00:40  yanghui01  阅读(126)  评论(0编辑  收藏  举报