Python / 如何移除字串中的特殊字元 使用 Unicode 編碼判斷保留中(日韓)、英文及數字字元

Python / 如何移除字串中的特殊字元 使用 Unicode 編碼判斷保留中(日韓)、英文及數字字元

在做文字資料的清理時,最頭痛就是內含有特殊的字元,諸如一些標點符號 (如”^*/$#)、特殊符號 (如空白、TAB) 甚至,系統控制符號 (如 \n 換行字元、\b 退位字元) 或尚未被定義的編碼。如果是在全英文的環境,要清理字元還算簡單,只需利用 ASCII Code 判斷字元是不是英文或數字即可。最直覺的辦法就是利用 replace() 這個函數以窮舉法去將目標字元移除,例如欲移除字串中的空白、TAB和換行字元可以用下列方式移除:

string.replace(' ', '').replace('	', '').replace('\n', '') #TAB也可以用\t表示


(由於接下來稍為對編碼及語法做簡單的說明,若已熟悉編碼或Python語法可以跳到最後直接參考範例程式)

利用字元編碼清除特殊字元

Python 內建就可以利用 ord() 函數取得字元的實際編碼,反過來也可以利用 chr() 函數將編碼重新轉換成字元。

▍ 利用 ord() 函數取得字元編碼

同樣得,如果是在英文環境那還算單純,由於 ASCII Code 其實就是對應 0 ~ 255 的數字,例如換行字元 (\n) 等同於 10、TAB 字元等同於 9。所以若只希望保留大小寫英文字元及數字,可以利用 ord() 函數取得字元的編碼,再判斷該字元應該被保留或移除。大寫英文字母 (A-Z) 的編碼分別對應 65~90、小寫英文字母 (a-z) 則為 97~122,而數字 (0-9) 的編碼則是 48~57。清除字元的範例如下,最終 string 的結果會是 'teststring'

source = 'test string*&#' #原始字串,包含空白及特殊字元
string = '' #空字串,儲存清除後的結果
for char in source:
	if 65 <= ord(char) <= 90 or 97 <= ord(char) <= 122 or 48 <= ord(char) <= 57:
		string += char

當然,也可以把上面的程式改成函數的方式重複使用:

def string_cleaner(source):
	string = '' #空字串,儲存清除後的結果
	
	for char in source:
		if 65 <= ord(char) <= 90 or 97 <= ord(char) <= 122 or 48 <= ord(char) <= 57:
			string += char

	return string

如果還希望保留其他字元,例如小數點 (.) 編碼為 46,也可以自行將 ASCII Code 加入判斷式當中。

▍補充:利用 chr() 函數將編碼轉換為字元

這邊補充一個相反的函數:chr()
剛剛我們利用 ord() 函數可以將字元轉換成實際的編碼數字,相反的若我們希望把編碼轉換成真正的字元,則可以利用 chr() 這個函數實現。例如編碼 48 實際上就是數字 0、編碼 72 實際上是大寫 H,當然也可以利用編碼加入特殊字元或系統控制符號。以下就是一個實例,原本是同一行的字串因為插入了換行字元後會變成兩行:

string = 'This is the first line.This is the second line.' #原始是同一行的字串
paragraph = string[:23] + chr(10) + string[23:] #插入換行字元,當然也可以用 '\n' 的方式插入
▲ 插入換行字元

CJK Characters 中日韓字元

說了這麼多這裡終於要進入正題,前面我們只提到在英文的環境下要如何清理字串,但到了亞洲文字事情就變得不單純。如果對二進位數字比較敏感的人可能會發現 ASCII Code 是一個 8 bits 的編碼,也就是在電腦中可以用八個位數的二進位去儲存字元 (一個字元佔 1 byte),可以儲存的數量就是 2 的 8 次方種組合,分別就是對應 0 ~ 255 的數字。但實際上全世界的文字絕對遠多於 256 種,甚至拉丁字母本身就已經不只是大小寫的 A-Z 這麼簡單,以至於後面出現了更多的 Latin Extended-A、Latin Extended-B 等字元集,這邊要提到的便是 Unicode。

Unicode 的中文翻譯有很多種,可以說是統一碼、萬國碼、單一碼等,總之他就是一個編碼儲存了世界上大部分的文字系統,也就是包含了現行世界上的電腦使用的所有文字。想當然爾,使用 Unicode 邊碼的文字不再是 8 bits 就足以儲存,例如中文字可能就需要 2 個甚至 3 個 bytes 來儲存字元邊碼,目前最常見就是使用 UTF-8 的編碼格式。

▍由 Unicode 區段列表中挑選出保留的字元區段

這篇文章的重點不是要講解邊碼的歷史或是組成格式,詳細可以在上網去查。這邊要提到的是當我們在處理包含中文字的字串時 (甚至是日韓文字) 該如何移除特殊字元,方法其實和前面利用邊碼的數字範圍判斷很類似。如果打開 Unicode 的區段列表,首先可以看到最前面兩組便是 ASCII Code (0-127) 和 The extended ASCII codes (128-255),後面還有各種語言的文字系統。若往下翻就可以看到如標題描述的 CJK Unified Ideographs (中日韓文統一表意文字),這邊的 CJK 當然分別就是表示中文、日文及韓文。同樣的,這裡不詳述邊碼的編撰歷史和各種邊碼區段的詳細組成,有興趣可以自己上網查詢。

換句話說,想要針對含有中日韓文的字串當中移除特殊字元,只需利用 Unicode 的編碼區段去做一個粗略的快速判斷,將不在這些範圍內的字元直接移除即可。所以這邊已經整理好現行所有的 Unicode 區段列表 (詳見附錄),並從中挑選出我們會使用到的 CJK 中日韓文字元集:

Unicode區段與包含的文字
區段範圍 區段名稱 英文名稱 碼位數[a] 已定義
字元數
文字[b][c][d][e][f]
U+0000..U+007F 基本拉丁字母 Basic Latin[g] 128 128 拉丁字母(52個), 共同字元(76個)
U+0080..U+00FF 拉丁字母補充-1 Latin-1 Supplement[h] 128 128 拉丁字母(64個), 共同字元(64個)
U+0100..U+017F 拉丁字母擴展-A Latin Extended-A 128 128 拉丁
U+0180..U+024F 拉丁字母擴展-B Latin Extended-B 208 208 拉丁
U+2E80..U+2EFF 中日韓漢字部首補充 CJK Radicals Supplement 128 115 漢字
U+2F00..U+2FDF 康熙部首 Kangxi Radicals 224 214 漢字
U+2FF0..U+2FFF 表意文字描述字符 Ideographic Description Characters 16 12 共用
U+3000..U+303F 中日韓符號和標點 CJK Symbols and Punctuation 64 64 漢字(15個), 諺文(2個), 共用(43個), 繼承(4個)
U+3040..U+309F 平假名 Hiragana 96 93 平假名(89個), 共用(2個), 繼承(2個)
U+30A0..U+30FF 片假名 Katakana 96 96 片假名(93個), 共用(3個)
U+3100..U+312F 注音符號 Bopomofo 48 43 注音字母
U+3130..U+318F 諺文相容字母 Hangul Compatibility Jamo 96 94 諺文
U+3190..U+319F 漢文訓讀 Kanbun 16 16 共用
U+31A0..U+31BF 注音符號擴展 Bopomofo Extended 32 32 注音字母
U+31C0..U+31EF 中日韓筆畫 CJK Strokes 48 36 共用
U+31F0..U+31FF 片假名拼音擴展 Katakana Phonetic Extensions 16 16 片假名
U+3200..U+32FF 中日韓圍繞字元及月份 Enclosed CJK Letters and Months 256 255 諺文(62個), 片假名(47個), 共用(146個)
U+3300..U+33FF 中日韓相容字元 CJK Compatibility 256 256 片假名(88個), 共用(168個)
U+3400..U+4DBF 中日韓統一表意文字擴展區A CJK Unified Ideographs Extension A 6592 6582 漢字
U+4DC0..U+4DFF 易經六十四卦符號 Yijing Hexagram Symbols 64 64 共用
U+4E00..U+9FFF 中日韓統一表意文字 CJK Unified Ideographs 20992 20989 漢字
U+F900..U+FAFF 中日韓相容表意文字 CJK Compatibility Ideographs 512 472 漢字
U+FE30..U+FE4F 中日韓相容形式 CJK Compatibility Forms 32 32 共用
U+FF00..U+FFEF 半形及全形字符 Halfwidth and Fullwidth Forms 240 225 諺文(52個), 片假名(55個), 拉丁(52個), 共用(66個)
U+16FE0..U+16FFF 表意符號和標點符號 Ideographic Symbols and Punctuation 32 7 漢字(2個)、契丹小字(1個)、女書(1個)、西夏文(1個), 通用(2個)
U+20000..U+2A6DF 中日韓統一表意文字擴展區B CJK Unified Ideographs Extension B 42720 42718 漢字
U+2A700..U+2B73F 中日韓統一表意文字擴展區C CJK Unified Ideographs Extension C 4160 4149 漢字
U+2B740..U+2B81F 中日韓統一表意文字擴展區D CJK Unified Ideographs Extension D 224 222 漢字
U+2B820..U+2CEAF 中日韓統一表意文字擴展區E CJK Unified Ideographs Extension E 5776 5762 漢字
U+2CEB0..U+2EBEF 中日韓統一表意文字擴展區F CJK Unified Ideographs Extension F 7488 7473 漢字
U+2F800..U+2FA1F 中日韓相容表意文字補充區 CJK Compatibility Ideographs Supplement 544 542 漢字
U+30000..U+3134F 中日韓統一表意文字擴展區G CJK Unified Ideographs Extension G 4944 4939 漢字

首先要先說明的是,上表挑選出的字集分為三個等級:

  1. 第一部分,上表所列就是所有與漢文字、日文、韓文,或台灣使用的注音符號、相關標點符號、全形英數字等所有相關字元集 (即黃色底、橘色底及紅色底的部分)。
  1. 而為了避免包含太多邊碼,第二部分則移除如易經、訓讀文字、描述字符等字元集,留下的則是我們日常生活中比較會使用到的字元,也就是橘色及紅色底的部分。
  1. 第三部分則是下面範例程式所定義的中日韓文字集,符合這區段內的字元會被保留下來,不符合則被視為特殊字元將之移除。另外也移除注音符號、標點符號以及太特別的少用文字,最終挑選出上表紅色底的部分。
▍使用正規表示法移除特殊字元

簡單來說,只要字元屬於我們所定義的區段內,就會將字元保留下來,反之我們會移除它。特別注意的是,關於 ASCII Code 的部份我們只保留英數字及其他歐語系拉丁文字,因為 ASCII Code 當中還包含許多特殊符號及系統控制符號。

以下範例是以函數的方式定義一個字串清理程式,將字串丟進去就可以把特殊字元過濾掉,保留下來的字元列表則如註解中說明:

 # CJK and Latin Letters Cleaner

 # Characters and Codes List:
 #   0-9              Digits (ASCII printable characters)
 #   a-z              Basic Latin Letters   (ASCII printable characters)
 #   A-Z              Basic Latin Letters   (ASCII printable characters)
 #   ƒ (\u83)         Latin Letters Extened (ASCII extended characters)
 #   Š (\u8a)         Latin Letters Extened (ASCII extended characters)
 #   Œ (\u8c)         Latin Letters Extened (ASCII extended characters)
 #   Ž (\u8e)         Latin Letters Extened (ASCII extended characters)
 #   š (\u9a)         Latin Letters Extened (ASCII extended characters)
 #   œ (\u9c)         Latin Letters Extened (ASCII extended characters)
 #   ž (\u9e)         Latin Letters Extened (ASCII extended characters)
 #   Ÿ (\u9f)         Latin Letters Extened (ASCII extended characters)
 #   \uc0-\ud6        Latin Letters Extened (ASCII extended characters)
 #   \ud8-\uf6        Latin Letters Extened (ASCII extended characters)
 #   \uf8-\uff        Latin Letters Extened (ASCII extended characters)
 #   \u100-\u17f      European Latin (Latin Extended-A)
 #   \u4e00-\u9fff    CJK Unified Ideographs (中日韓統一表意文字)
 #   \u3040-\u309f    Hiragana (平假名)
 #   \u30a0-\u30ff    Katakana (片假名)
 #   \u3130-\u318f    Korean language and computers (Hangul Compatibility Jamo 韓文)
 #   \uff00-\uffef    Halfwidth and Fullwidth Forms (半形及全形字符)
 #
 #   !!!! 5 bits unicode, re.UNICODE不支援,暫時不加入 !!!!
 #   \u20000-\u2s6df  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區B)
 #   \u2a700-\u2b73f  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區C)
 #   \u2b740-\u2b81f  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區D)
 #   \u2b820-\u2ceaf  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區E)
 #   \u2ceb0-\u2ebef  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區F)
 #   \u2f800-\u2fa1f  CJK Unified Ideographs Extension B (中日韓相容表意文字補充區)
 #   \u30000-\u3134f  CJK Unified Ideographs Extension B (中日韓統一表意文字擴展區G)
 

## regex package ##
import re

## Main Function ##
def CJK_cleaner(string):
    #Keep CJS Characters, Latin Letters and Digits (listed above)
	filters = re.compile(u'[^0-9a-zA-Z\u0083\u008a\u008c\u008e\u009a\u009c\u009e\u009f\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0100-\u017f\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff\u3130-\u318f\uff00-\uffef]+', re.UNICODE)
	return filters.sub('', string) #remove special characters
#------

這邊不詳細說明正規表示法的函數和格式,re.compile() 函數定義了正規表示法,其中很長一連串的 Unicode 邊碼 \uxxxx 列出的是我們所接受的字元區段,^ 符號則為否定的意思,+ 符號則代表一次或多次出現,簡言之就是挑出不符合上列編碼的所有字元。而 sub() 函數則是將表示法中描述的字元替換為 '' 空字元,也就是移除。

注意尚未被定義的字元編碼

由於我們是以比較快速的方法,利用編碼區段直接辨識字元究竟屬於哪類文字,但是需注意的是並非整個區段中的所有編碼都已經被定義,且即使被定義亦有可能包含一些特殊字元。以「中日韓符號和標點」為例,雖該區段 64 個字元編碼均已被定義,但我仍曾經見過有資料倉儲使用 \u3000 作為分隔符號 (參考 Unicode 官方文件),而實際上這個字元於大多數的文件、軟體當中亦不會被顯示,或是以空格顯示。所以若是沒有將這個字元排除,會導致字串在進行處裡或辨識的時候可能造成誤判。

當然我們可以不要將一些比較特別的字元集放入,以本篇的範例來說也沒有將「中日韓符號和標點」列入保留的字元當中。若為求保險些,可以只選擇保留最常見的中文字集,即「中日韓統一表意文字 (CJK Unified Ideographs)」,Unicode 編碼區段為 \u4e00-\u9fff,程式碼則可以簡化如下。不過特別注意一下即使這個字集也非所有字元碼均已被定義,為了避免可能出現的誤判,在程式撰寫的時候還是最後注意一下資料當中是否存在特別的字元。

def CJK_cleaner(string): #移除特殊字元,僅保留英數字及中日韓統一表意文字(CJK Unified Ideographs)
	filters = re.compile(u'[^0-9a-zA-Z\u4e00-\u9fff]+', re.UNICODE)
	return filters.sub('', string) #remove special characters

附件:Unicode 區段列表

Unicode區段與包含的文字
平面 區段範圍 區段名稱 英文名稱 碼位數[a] 已定義
字元數
文字[b][c][d][e][f]
0 BMP U+0000..U+007F 基本拉丁字母 Basic Latin[g] 128 128 拉丁字母(52個), 共同字元(76個)
U+0080..U+00FF 拉丁字母補充-1 Latin-1 Supplement[h] 128 128 拉丁字母(64個), 共同字元(64個)
U+0100..U+017F 拉丁字母擴展-A Latin Extended-A 128 128 拉丁
U+0180..U+024F 拉丁字母擴展-B Latin Extended-B 208 208 拉丁
U+0250..U+02AF 國際音標擴展 IPA Extensions 96 96 拉丁
U+02B0..U+02FF 佔位修飾符號 Spacing Modifier Letters 80 80 注音符號(2個), 拉丁字元(14 個), 共用(64 個)
U+0300..U+036F 組合附加符號 Combining Diacritical Marks 112 112 繼承(Inherited)
U+0370..U+03FF 希臘字母及科普特字母 Greek and Coptic 144 135 科普特字母(14個), 希臘字母(117個), 共用(4個)
U+0400..U+04FF 西里爾字母 Cyrillic 256 256 西里爾字母(254個), 繼承(2個)
U+0500..U+052F 西里爾字母補充 Cyrillic Supplement 48 48 西里爾字母
U+0530..U+058F 亞美尼亞字母 Armenian 96 91 亞美尼亞字母
U+0590..U+05FF 希伯來文字母 Hebrew 112 88 希伯來字母
U+0600..U+06FF 阿拉伯文字母 Arabic 256 255 阿拉伯字母(237個), 共用(6個), 繼承(12個)
U+0700..U+074F 敘利亞字母 Syriac 80 77 敘利亞字母
U+0750..U+077F 阿拉伯文補充 Arabic Supplement 48 48 阿拉伯文
U+0780..U+07BF 它拿字母 Thaana 64 50 它拿字母
U+07C0..U+07FF 西非書面文字 NKo 64 62 西非書面文字
U+0800..U+083F 撒瑪利亞字母 Samaritan 64 61 撒瑪利亞字母
U+0840..U+085F 曼達安字母 Mandaic 32 29 曼達安字母
U+0860..U+086F 敘利亞文補充 Syriac Supplement 16 11 敘利亞文
U+08A0..U+08FF 阿拉伯文擴展-A Arabic Extended-A 96 84 阿拉伯字母(83個), 共用(1個)
U+0900..U+097F 天城文 Devanagari 128 128 天城文(122個), 共用(2個), 繼承(4個)
U+0980..U+09FF 孟加拉文 Bengali 128 96 孟加拉文
U+0A00..U+0A7F 古木基文 Gurmukhi 128 80 古木基文
U+0A80..U+0AFF 古吉拉特文 Gujarati 128 91 古吉拉特文
U+0B00..U+0B7F 奧里亞文 Oriya 128 91 奧里亞文
U+0B80..U+0BFF 泰米爾文 Tamil 128 72 泰米爾文
U+0C00..U+0C7F 泰盧固文 Telugu 128 98 泰盧固文
U+0C80..U+0CFF 卡納達文 Kannada 128 89 卡納達文
U+0D00..U+0D7F 馬拉雅拉姆文 Malayalam 128 117 馬拉雅拉姆文
U+0D80..U+0DFF 僧伽羅文 Sinhala 128 91 僧伽羅文
U+0E00..U+0E7F 泰文 Thai 128 87 泰文(86個), 共用(1個)
U+0E80..U+0EFF 寮文 Lao 128 82 寮文
U+0F00..U+0FFF 藏文 Tibetan 256 211 藏文字母(207個), 共用(4個)
U+1000..U+109F 緬甸文 Myanmar 160 160 緬文
U+10A0..U+10FF 喬治亞字母 Georgian 96 88 喬治亞字母(87個), 共用(1個)
U+1100..U+11FF 諺文字母 Hangul Jamo 256 256 諺文
U+1200..U+137F 吉茲字母 Ethiopic 384 358 吉茲字母
U+1380..U+139F 吉茲字母補充 Ethiopic Supplement 32 26 吉茲字母
U+13A0..U+13FF 切羅基文 Cherokee 96 92 切羅基文
U+1400..U+167F 統一加拿大原住民音節文字 Unified Canadian Aboriginal Syllabics 640 640 加拿大原住民音節文字
U+1680..U+169F 歐甘字母 Ogham 32 29 歐甘字母
U+16A0..U+16FF 盧恩字母 Runic 96 89 盧恩字母(86個), 共用(3個)
U+1700..U+171F 他加祿字母 Tagalog 32 20 他加祿字母
U+1720..U+173F 哈努諾文 Hanunoo 32 23 哈努諾字母(21個), 共用(2個)
U+1740..U+175F 布希德文 Buhid 32 20 布希德文
U+1760..U+177F 塔格巴努亞文 Tagbanwa 32 18 塔格巴努亞文
U+1780..U+17FF 高棉文 Khmer 128 114 高棉文
U+1800..U+18AF 蒙古文 Mongolian 176 157 蒙古文字母(154個), 共用(3個)
U+18B0..U+18FF 加拿大原住民音節文字擴展 Unified Canadian Aboriginal Syllabics Extended 80 70 加拿大原住民音節文字
U+1900..U+194F 林布文 Limbu 80 68 林布文
U+1950..U+197F 德宏傣文 Tai Le 48 35 德宏傣文
U+1980..U+19DF 新傣仂文 New Tai Le 96 83 新傣仂文
U+19E0..U+19FF 高棉文符號 Khmer Symbols 32 32 高棉文
U+1A00..U+1A1F 布吉文 Buginese 32 30 布吉文
U+1A20..U+1AAF 老傣文 Tai Tham 144 127 老傣文
U+1AB0..U+1AFF 組合附加符號擴展 Combining Diacritical Marks Extended 80 17 繼承
U+1B00..U+1B7F 峇里字母 Balinese 128 121 峇里字母
U+1B80..U+1BBF 巽他字母 Sundanese 64 64 巽他字母
U+1BC0..U+1BFF 巴塔克文 Batak 64 56 巴塔克文
U+1C00..U+1C4F 絨巴文 Lepcha 80 74 絨巴文
U+1C50..U+1C7F 桑塔利文 Ol Chiki 48 48 桑塔利文
U+1C80..U+1C8F 西里爾字母擴展-C Cyrillic Extended-C 16 9 西里爾字母
U+1C90..U+1CBF 喬治亞字母擴展 Georgian Extended 48 46 喬治亞字母
U+1CC0..U+1CCF 巽他字母補充 Sundanese Supplement 16 8 巽他字母
U+1CD0..U+1CFF 梵文吠陀擴展 Vedic Extensions 48 43 共用(16個), 繼承(27個)
U+1D00..U+1D7F 音標擴展 Phonetic Extensions 128 128 西里爾字母(2個), 希臘字母(15個), 拉丁字母(111個)
U+1D80..U+1DBF 音標擴展補充 Phonetic Extensions Supplement 64 64 希臘字母(1個), 拉丁字母(63個)
U+1DC0..U+1DFF 組合附加符號補充 Combining Diacritical Marks Supplement 64 63 繼承
U+1E00..U+1EFF 拉丁文擴展附加 Latin Extended Additional 256 256 拉丁
U+1F00..U+1FFF 希臘字母擴展 Greek Extended 256 233 希臘字母
U+2000..U+206F 常用標點 General Punctuation 112 111 共用(109個), 繼承(2個)
U+2070..U+209F 上標及下標 Superscripts and Subscripts 48 42 拉丁(15個), 共用(27個)
U+20A0..U+20CF 貨幣符號 Currency Symbols 48 32 共用
U+20D0..U+20FF 符號用組合附加符號 Combining Diacritical Marks for Symbols 48 33 繼承
U+2100..U+214F 字母式符號 Letterlike Symbols 80 80 希臘文(1個), 拉丁(4個), 共用(75個)
U+2150..U+218F 數字形式 Number Forms 64 60 拉丁(41個), 共用(19個)
U+2190..U+21FF 箭頭 Arrows 112 112 共用
U+2200..U+22FF 數學運算子 Mathematical Operators 256 256 共用
U+2300..U+23FF 雜項工業符號 Miscellaneous Technical 256 256 共用
U+2400..U+243F 控制圖片 Control Pictures 64 39 共用
U+2440..U+245F 光學識別符 Optical Character Recognition 32 11 共用
U+2460..U+24FF 帶圈字母和數字 Enclosed Alphanumerics 160 160 共用
U+2500..U+257F 制表符 Box Drawing 128 128 共用
U+2580..U+259F 方塊元素 Block Elements 32 32 共用
U+25A0..U+25FF 幾何圖形 Geometric Shapes 96 96 共用
U+2600..U+26FF 雜項符號 Miscellaneous Symbols 256 256 共用
U+2700..U+27BF 裝飾符號 Dingbats 192 192 共用
U+27C0..U+27EF 雜項數學符號-A Miscellaneous Mathematical Symbols-A 48 48 共用
U+27F0..U+27FF 追加箭頭-A Supplemental Arrows-A 16 16 共用
U+2800..U+28FF 盲文點字模型 Braille Patterns 256 256 盲文點字模型
U+2900..U+297F 追加箭頭-B Supplemental Arrows-B 128 128 共用
U+2980..U+29FF 雜項數學符號-B Miscellaneous Mathematical Symbols-B 128 128 共用
U+2A00..U+2AFF 追加數學運算子 Supplemental Mathematical Operators 256 256 共用
U+2B00..U+2BFF 雜項符號和箭頭 Miscellaneous Symbols and Arrows 256 253 共用
U+2C00..U+2C5F 格拉哥里字母 Glagolitic 96 94 格拉哥里字母
U+2C60..U+2C7F 拉丁文擴展-C Latin Extended-C 32 32 拉丁字母
U+2C80..U+2CFF 科普特字母 Coptic 128 123 科普特字母
U+2D00..U+2D2F 喬治亞字母補充 Georgian Supplement 48 40 喬治亞字母
U+2D30..U+2D7F 提非納文 Tifinagh 80 59 提非納文
U+2D80..U+2DDF 吉茲字母擴展 Ethiopic Extended 96 79 吉茲字母
U+2DE0..U+2DFF 西里爾字母擴展-A Cyrillic Extended-A 32 32 西里爾字母
U+2E00..U+2E7F 追加標點 Supplemental Punctuation 128 83 共用
U+2E80..U+2EFF 中日韓漢字部首補充 CJK Radicals Supplement 128 115 漢字
U+2F00..U+2FDF 康熙部首 Kangxi Radicals 224 214 漢字
U+2FF0..U+2FFF 表意文字描述字符 Ideographic Description Characters 16 12 共用
U+3000..U+303F 中日韓符號和標點 CJK Symbols and Punctuation 64 64 漢字(15個), 諺文(2個), 共用(43個), 繼承(4個)
U+3040..U+309F 平假名 Hiragana 96 93 平假名(89個), 共用(2個), 繼承(2個)
U+30A0..U+30FF 片假名 Katakana 96 96 片假名(93個), 共用(3個)
U+3100..U+312F 注音符號 Bopomofo 48 43 注音字母
U+3130..U+318F 諺文相容字母 Hangul Compatibility Jamo 96 94 諺文
U+3190..U+319F 漢文訓讀 Kanbun 16 16 共用
U+31A0..U+31BF 注音符號擴展 Bopomofo Extended 32 32 注音字母
U+31C0..U+31EF 中日韓筆畫 CJK Strokes 48 36 共用
U+31F0..U+31FF 片假名拼音擴展 Katakana Phonetic Extensions 16 16 片假名
U+3200..U+32FF 中日韓圍繞字元及月份 Enclosed CJK Letters and Months 256 255 諺文(62個), 片假名(47個), 共用(146個)
U+3300..U+33FF 中日韓相容字元 CJK Compatibility 256 256 片假名(88個), 共用(168個)
U+3400..U+4DBF 中日韓統一表意文字擴展區A CJK Unified Ideographs Extension A 6592 6582 漢字
U+4DC0..U+4DFF 易經六十四卦符號 Yijing Hexagram Symbols 64 64 共用
U+4E00..U+9FFF 中日韓統一表意文字 CJK Unified Ideographs 20992 20989 漢字
U+A000..U+A48F 彝文音節 Yi Syllables 1168 1165 彝文
U+A490..U+A4CF 彝文字根 Yi Radicals 64 55 彝文
U+A4D0..U+A4FF 老傈僳文 Lisu 48 48 老傈僳文
U+A500..U+A63F 瓦伊語文字 Vai 320 300 瓦伊文
U+A640..U+A69F 西里爾字母擴展-B Cyrillic Extended-B 96 96 西里爾字母
U+A6A0..U+A6FF 巴姆穆文字 Bamum 96 88 巴姆穆文字
U+A700..U+A71F 聲調修飾符號 Modifier Tone Letters 32 32 共用
U+A720..U+A7FF 拉丁文擴展-D Latin Extended-D 224 180 拉丁(175個), 共用(5個)
U+A800..U+A82F 錫爾赫特文 Syloti Nagri 48 44 錫爾赫特文
U+A830..U+A83F 通用印度數字格式 Common Indic Number Forms 16 10 共用
U+A840..U+A87F 八思巴字 Phags-pa 64 56 八思巴字
U+A880..U+A8DF 索拉什特拉文 Saurashtra 96 82 索拉什特拉文
U+A8E0..U+A8FF 天城文擴展 Devanagari Extended 32 32 天城文
U+A900..U+A92F 克耶里字母 Kayah Li 48 48 克耶里字母(47個), 共用(1個)
U+A930..U+A95F 勒姜字母 Rejang 48 37 勒姜字母
U+A960..U+A97F 諺文擴展-A Hangul Jamo Extended-A 32 29 諺文
U+A980..U+A9DF 爪哇字母 Javanese 96 91 爪哇字母(90個), 共用(1個)
U+A9E0..U+A9FF 緬甸文擴展-B Myanmar Extended-B 32 31 緬甸文
U+AA00..U+AA5F 占語字母 Cham 96 83 占文
U+AA60..U+AA7F 緬甸文擴展-A Myanmar Extended-A 32 32 緬甸文
U+AA80..U+AADF 傣越文 Tai Viet 96 72 傣越文
U+AAE0..U+AAFF 曼尼普爾文擴展 Meetei Mayek Extensions 32 23 曼尼普爾文
U+AB00..U+AB2F 吉茲字母擴展-A Ethiopic Extended-A 48 32 吉茲字母
U+AB30..U+AB6F 拉丁文擴展-E Latin Extended-E 64 60 拉丁(56個), 希臘語(1個), 共用(3個)
U+AB70..U+ABBF 切羅基文補充 Cherokee Supplement 80 80 切羅基文
U+ABC0..U+ABFF 曼尼普爾文 Meetei Mayek 64 56 曼尼普爾文
U+AC00..U+D7AF 諺文音節 Hangul Syllables 11184 11172 諺文
U+D7B0..U+D7FF 諺文字母擴展-B Hangul Jamo Extended-B 80 72 諺文
U+D800..U+DB7F 高半代用區 High Surrogates 896 0 未知
U+DB80..U+DBFF 高半私人代用區 High Private Use Surrogates 128 0 未知
U+DC00..U+DFFF 低半代用區 Low Surrogates 1024 0 未知
U+E000..U+F8FF 私用區 Private Use Area 6400 6400 未知
U+F900..U+FAFF 中日韓相容表意文字 CJK Compatibility Ideographs 512 472 漢字
U+FB00..U+FB4F 字母表達形式 Alphabetic Presentation Forms 80 58 亞美尼亞文(5個), 希伯來文(46個), 拉丁(7個)
U+FB50..U+FDFF 阿拉伯字母表達形式-A Arabic Presentation Forms-A 688 611 阿拉伯字母(609個), 共用(2個)
U+FE00..U+FE0F 變體選擇符 Variation Selectors 16 16 繼承
U+FE10..U+FE1F 豎排形式 Vertical Forms 16 10 共用
U+FE20..U+FE2F 組合用半符號 Combining Half Marks 16 16 西里爾字母(2個), 繼承(14個)
U+FE30..U+FE4F 中日韓相容形式 CJK Compatibility Forms 32 32 共用
U+FE50..U+FE6F 小寫變體形式 Small Form Variants 32 26 共用
U+FE70..U+FEFF 阿拉伯文表達形式-B Arabic Presentation Forms-B 144 141 阿拉伯字母(140個), 共用(1個)
U+FF00..U+FFEF 半形及全形字符 Halfwidth and Fullwidth Forms 240 225 諺文(52個), 片假名(55個), 拉丁(52個), 共用(66個)
U+FFF0..U+FFFF 特殊 Specials 16 5 共用
1 SMP U+10000..U+1007F 線形文字B音節文字 Linear B Syllabary 128 88 線形文字B
U+10080..U+100FF 線形文字B表意文字 Linear B Ideograms 128 123 線形文字B
U+10100..U+1013F 愛琴海數字 Aegean Numbers 64 57 共用
U+10140..U+1018F 古希臘數字 Ancient Greek Numbers 80 79 希臘文
U+10190..U+101CF 古代符號 Ancient Symbols 64 14 希臘文(1個), 共用(13個)
U+101D0..U+101FF 斐斯托斯圓盤 Phaistos Disc 48 46 共用(45個), 繼承(1個)
U+10280..U+1029F 呂基亞字母 Lycian 32 29 呂基亞字母
U+102A0..U+102DF 卡里亞字母 Carian 64 49 卡利亞字母
U+102E0..U+102FF 科普特閏餘數字 Coptic Epact Numbers 32 28 共用(27個), 繼承(1個)
U+10300..U+1032F 古義大利字母 Old Italic 48 39 古義大利字母
U+10330..U+1034F 哥特字母 Gothic 32 27 哥特字母
U+10350..U+1037F 古彼爾姆文 Old Permic 48 43 古彼爾姆文
U+10380..U+1039F 烏加里特字母 Ugaritic 32 31 烏加里特字母
U+103A0..U+103DF 古波斯楔形文字 Old Persian 64 50 古波斯楔形文字
U+10400..U+1044F 德瑟雷特字母 Deseret 80 80 德瑟雷特字母
U+10450..U+1047F 蕭伯納字母 Shavian 48 48 蕭伯納字母
U+10480..U+104AF 奧斯曼亞字母 Osmanya 48 40 奧斯曼亞字母
U+104B0..U+104FF 歐塞奇字母 Osage 80 72 歐塞奇字母
U+10500..U+1052F 愛爾巴桑字母 Elbasan 48 40 愛爾巴桑字母
U+10530..U+1056F 高加索阿爾巴尼亞文 Caucasian Albanian 64 53 高加索阿爾巴尼亞文
U+10600..U+1077F 線形文字A Linear A 384 341 線形文字A
U+10800..U+1083F 賽普勒斯音節文字 Cypriot Syllabary 64 55 賽普勒斯音節文字
U+10840..U+1085F 帝國亞拉姆文字 Imperial Aramaic 32 31 帝國亞拉姆文字
U+10860..U+1087F 帕爾邁拉字母 Palmyrene 32 32 帕爾邁拉字母
U+10880..U+108AF 納巴泰字母 Nabataean 48 40 納巴泰字母
U+108E0..U+108FF 哈特拉文 Hatran 32 26 哈特拉文
U+10900..U+1091F 腓尼基字母 Phoenician 32 29 腓尼基字母
U+10920..U+1093F 呂底亞字母 Lydian 32 27 呂底亞字母
U+10980..U+1099F 麥羅埃文聖書體 Meroitic Hieroglyphs 32 32 麥羅埃文聖書體
U+109A0..U+109FF 麥羅埃文草書體 Meroitic Cursive 96 90 麥羅埃文草書體
U+10A00..U+10A5F 佉盧文 Kharoshthi 96 68 佉盧文
U+10A60..U+10A7F 古南阿拉伯字母 Old South Arabian 32 32 古南阿拉伯字母
U+10A80..U+10A9F 古北阿拉伯字母 Old North Arabian 32 32 古北阿拉伯字母
U+10AC0..U+10AFF 摩尼字母 Manichaean 64 51 摩尼字母
U+10B00..U+10B3F 阿維斯陀字母 Avestan 64 61 阿維斯陀字母
U+10B40..U+10B5F 碑刻帕提亞文 Inscriptional Parthian 32 30 碑刻帕提亞文
U+10B60..U+10B7F 碑刻巴列維文 Inscriptional Pahlavi 32 27 碑刻巴列維文
U+10B80..U+10BAF 詩篇巴列維文 Psalter Pahlavi 48 29 詩篇巴列維文
U+10C00..U+10C4F 古突厥文 Old Turkic 80 73 古突厥文
U+10C80..U+10CFF 古匈牙利字母 Old Hungarian 128 108 古匈牙利字母
U+10D00..U+10D3F 哈乃斐羅興亞文字 Hanifi Rohingya 64 50 哈乃斐羅興亞文字
U+10E60..U+10E7F 盧米文數字 Rumi Numeral Symbols 32 31 阿拉伯文
U+10E80..U+10EBF 雅茲迪文 Yezidi 64 47 雅茲迪文
U+10F00..U+10F2F 古粟特字母 Old Sogdian 48 40 古粟特字母
U+10F30..U+10F6F 粟特字母 Sogdian 64 42 粟特字母
U+10FB0..U+10FDF 花剌子模字母 Chorasmian 48 28 花剌子模字母
U+10FE0..U+10FFF 埃利邁文 Elymaic 32 23 埃利邁文
U+11000..U+1107F 婆羅米文 Brahmi 128 109 婆羅米文
U+11080..U+110CF 凱提文 Kaithi 80 67 凱提文
U+110D0..U+110FF 索拉僧平文字 Sora Sompeng 48 35 索拉僧平文字
U+11100..U+1114F 查克馬文 Chakma 80 71 查克馬文
U+11150..U+1117F 馬哈佳尼文 Mahajani 48 39 馬哈佳尼文
U+11180..U+111DF 夏拉達文 Sharada 96 96 夏拉達文
U+111E0..U+111FF 古僧伽羅文數字 Sinhala Archaic Numbers 32 20 古僧伽羅文數字
U+11200..U+1124F 可吉文 Khojki 80 62 可吉文
U+11280..U+112AF 穆爾塔尼文 Multani 48 38 穆爾塔尼文
U+112B0..U+112FF 庫達瓦迪文 Khudawadi 80 69 庫達瓦迪文
U+11300..U+1137F 古蘭塔文 Grantha 128 86 古蘭塔文
U+11400..U+1147F 紐瓦字母 Newa 128 97 紐瓦字母
U+11480..U+114DF 底羅僕多文 Tirhuta 96 82 底羅仆多文
U+11580..U+115FF 悉曇文字 Siddham 128 92 悉曇文字
U+11600..U+1165F 莫迪文 Modi 96 79 莫迪文
U+11660..U+1167F 蒙古文補充 Mongolian Supplement 32 13 蒙古文
U+11680..U+116CF 塔克里字母 Takri 80 67 塔克里字母
U+11700..U+1173F 阿洪姆文 Ahom 64 58 阿洪姆文
U+11800..U+1184F 多格拉文 Dogra 80 60 多格拉文
U+118A0..U+118FF 瓦蘭齊地文 Warang Citi 96 84 瓦蘭齊地文
U+11900..U+1195F 島嶼字母 Dhives Akuru (Dives Akuru) 96 72 島嶼字母
U+119A0..U+119FF 南迪城文 Nandinagari 96 65 南迪城文
U+11A00..U+11A4F 札那巴札爾方形字母 Zanabazar Square 80 72 札那巴札爾方形字母
U+11A50..U+11AAF 索永布文字 Soyombo 96 83 索永布文字
U+11AC0..U+11AFF 包欽豪文 Pau Cin Hau 64 57 包欽豪文
U+11C00..U+11C6F 拜克舒基文 Bhaiksuki 112 97 拜克舒基文
U+11C70..U+11CBF 瑪欽文 Marchen 80 68 瑪欽文
U+11D00..U+11D5F 馬薩拉姆貢德文字 Masaram Gondi 96 75 馬薩拉姆貢德文字
U+11D60..U+11DAF 貢賈拉貢德文字 Gunjala Gondi 80 63 貢賈拉貢德文字
U+11EE0..U+11EFF 望加錫文 Makasar     望加錫文
U+11FB0..U+11FBF 老傈僳文補充 Lisu Supplement 16 1 老傈僳文
U+11FC0..U+11FFF 泰米爾文補充 Tamil Supplement 64 51 泰米爾文
U+12000..U+123FF 楔形文字 Cuneiform 1024 922 楔形文字
U+12400..U+1247F 楔形文字數字和標點符號 Cuneiform Numbers and Punctuation 128 116 楔形文字
U+12480..U+1254F 早期王朝楔形文字 Early Dynastic Cuneiform 208 196 楔形文字
U+13000..U+1342F 埃及聖書體 Egyptian Hieroglyphs 1072 1071 埃及聖書體
U+13430..U+1343F 埃及聖書體格式控制 Egyptian Hieroglyph Format Controls 16 9 埃及聖書體
U+14400..U+1467F 安納托利亞象形文字 Anatolian Hieroglyphs 640 583 安納托利亞象形文字
U+16800..U+16A3F 巴姆穆文字補充 Bamum Supplement 576 569 巴姆穆文字
U+16A40..U+16A6F 默祿文 Mro 48 43 默祿文
U+16AD0..U+16AFF 巴薩文 Bassa Vah 48 36 巴薩文
U+16B00..U+16B8F 救世苗文 Pahawh Hmong 144 127 救世苗文
U+16E40..U+16E9F 梅德法伊德林文 Medefaidrin 96 91 梅德法伊德林文
U+16F00..U+16F9F 柏格理苗文 Miao 160 149 柏格理苗文
U+16FE0..U+16FFF 表意符號和標點符號 Ideographic Symbols and Punctuation 32 7 漢字(2個)、契丹小字(1個)、女書(1個)、西夏文(1個), 通用(2個)
U+17000..U+187FF 西夏文 Tangut 6144 6136 西夏文
U+18800..U+18AFF 西夏文部件 Tangut Components 768 755 西夏文
U+18B00..U+18CFF 契丹小字 Khitan Small Script 512 470 契丹小字
U+18D00..U+18D8F 西夏文補充 Tangut Supplement 144 9 Tangut
U+1B000..U+1B0FF 日文假名補充 Kana Supplement 256 256 平假名(255個), 片假名(1個)
U+1B100..U+1B12F 日文假名擴展-A Kana Extended-A 48 31 平假名
U+1B130..U+1B16F 小型日文假名擴展 Small Kana Extension 64 7 平假名 (3個), 片假名 (4個)
U+1B170..U+1B2FF 女書 Nushu 400 396 女書
U+1BC00..U+1BC9F 杜普雷速記 Duployan 160 143 杜普雷速記
U+1BCA0..U+1BCAF 速記格式控制符 Shorthand Format Controls 16 4 共用
U+1D000..U+1D0FF 拜占庭音樂符號 Byzantine Musical Symbols 256 246 共用
U+1D100..U+1D1FF 音樂符號 Musical Symbols 256 231 共用(209個), 繼承(22個)
U+1D200..U+1D24F 古希臘音樂記號 Ancient Greek Musical Notation 80 70 希臘語
U+1D2E0..U+1D2FF 瑪雅數字 Mayan Numerals 32 20 共用
U+1D300..U+1D35F 太玄經符號 Tai Xuan Jing Symbols 96 87 共用
U+1D360..U+1D37F 算籌 Counting Rod Numerals 32 25 共用
U+1D400..U+1D7FF 字母和數字符號 Mathematical Alphanumeric Symbols 1024 996 共用
U+1D800..U+1DAAF 薩頓書寫符號 Sutton SignWriting 688 672 薩頓書寫符號
U+1E000..U+1E02F 格拉哥里字母補充 Glagolitic Supplement 48 38 格拉哥里字母
U+1E100..U+1E14F 創世紀苗文 Nyiakeng Puachue Hmong 80 71 創世紀苗文
U+1E2C0..U+1E2FF 文喬字母 Wancho 64 59 文喬字母
U+1E800..U+1E8DF 門德基卡庫文 Mende Kikakui 224 213 門德基卡庫文
U+1E900..U+1E95F 阿德拉姆字母 Adlam 96 87 阿德拉姆字母
U+1EC70..U+1ECBF 印度西亞格數字 Indic Siyaq Numbers 80 68 共用
U+1ED00..U+1ED4F 奧斯曼西亞格數字 Ottoman Siyaq Numbers 80 61 共用
U+1EE00..U+1EEFF 阿拉伯字母數字符號 Arabic Mathematical Alphabetic Symbols 256 143 阿拉伯文
U+1F000..U+1F02F 麻將牌 Mahjong Tiles 48 44 共用
U+1F030..U+1F09F 多米諾骨牌 Domino Tiles 112 100 共用
U+1F0A0..U+1F0FF 撲克牌 Playing Cards 96 82 共用
U+1F100..U+1F1FF 帶圈字母數字補充 Enclosed Alphanumeric Supplement 256 200 共用
U+1F200..U+1F2FF 帶圈表意文字補充 Enclosed Ideographic Supplement 256 64 平假名(1 個), 共用(63個)
U+1F300..U+1F5FF 雜項符號和象形文字 Miscellaneous Symbols and Pictographs 768 768 共用
U+1F600..U+1F64F 表情符號 Emoticons 80 80 共用
U+1F650..U+1F67F 裝飾符號 Ornamental Dingbats 48 48 共用
U+1F680..U+1F6FF 交通和地圖符號 Transport and Map Symbols 128 114 共用
U+1F700..U+1F77F 鍊金術符號 Alchemical Symbols 128 116 共用
U+1F780..U+1F7FF 幾何圖形擴展 Geometric Shapes Extended 128 101 共用
U+1F800..U+1F8FF 追加箭頭-C Supplemental Arrows-C 256 150 共用
U+1F900..U+1F9FF 補充符號和象形文字 Supplemental Symbols and Pictographs 256 254 共用
U+1FA00..U+1FA6F 棋類符號 Chess Symbols 112 98 共用
U+1FA70..U+1FAFF 符號和象形文字擴展-A Symbols and Pictographs Extended-A 144 57 共用
U+1FB00..U+1FBFF 遺留計算符號 Symbols for Legacy Computing 256 212 共用
2 SIP U+20000..U+2A6DF 中日韓統一表意文字擴展區B CJK Unified Ideographs Extension B 42720 42718 漢字
U+2A700..U+2B73F 中日韓統一表意文字擴展區C CJK Unified Ideographs Extension C 4160 4149 漢字
U+2B740..U+2B81F 中日韓統一表意文字擴展區D CJK Unified Ideographs Extension D 224 222 漢字
U+2B820..U+2CEAF 中日韓統一表意文字擴展區E CJK Unified Ideographs Extension E 5776 5762 漢字
U+2CEB0..U+2EBEF 中日韓統一表意文字擴展區F CJK Unified Ideographs Extension F 7488 7473 漢字
U+2F800..U+2FA1F 中日韓相容表意文字補充區 CJK Compatibility Ideographs Supplement 544 542 漢字
3 SIP U+30000..U+3134F 中日韓統一表意文字擴展區G CJK Unified Ideographs Extension G 4944 4939 漢字
14 SSP U+E0000..U+E007F 標籤 Tags 128 97 共用
U+E0100..U+E01EF 變體選擇符補充 Variation Selectors Supplement 240 240 繼承
15 PUA-A U+F0000..U+FFFFF 補充私人使用區-A Supplementary Private Use Area-A 65536 65534 未知
16 PUA-B U+100000..U+10FFFF 補充私人使用區-B Supplementary Private Use Area-B 65536 65534 未知

a. ^ 代碼點包括未分配的代碼點(非字符或保留代碼點)。
b. ^ 根據文字屬性的定義,文字在區段中有一個或多個字符,與區段名稱無關
c. ^ 「共用」、「未知」(Zyyy) 與「繼承」(Zinh 或 Qaai) 參考自ISO 15924的4位代碼
d. ^ Unicode區段資料文件,根據 Unicode 13.0
e. ^ UAX 24:Unicode文字屬性(4位代碼)
f. ^ UAX 24:文字資料檔案
g. ^ 在ISO/IEC 10646稱為「C0 Controls and Basic Latin」。
h. ^ 在ISO/IEC 10646稱為「C1 Controls and Latin-1 Supplement」。

*資料來源:https://zh.wikipedia.org/wiki/Unicode%E5%8D%80%E6%AE%B5


Reference