突然来了兴致,想看看 Unicode 中有多少个中文,查了一下,很多人都是说 4e00 至 9fff 段1。
# -*- coding: utf-8 -*-
all_chinese_in_unicode = range(0x4e00, 0x9fff)
def transfer(u_char_num):
if isinstance(u_char_num, int):
u_char_hex = '%x' % u_char_num
u_char_str = '\u' + u_char_hex
else:
if isinstance(u_char_num, str) and len(u_char_num) == 4:
u_char_str = '\u' + u_char_num
else:
raise Exception
u_char = u_char_str.decode('raw_unicode_escape')
# print u_char_hex, u_char
return u_char
def test_transfer():
# repr(u"国") -> u'\u56fd' -> 22269
print transfer(0x56fd)
# 打印所有中文字符
# for i in all_chinese_in_unicode:
# print transfer(i),
# print
# 打印最后一个中文字符及前、后各一个字符
last_chinese_char = 0x9fbb
last_chinese_char_index = all_chinese_in_unicode.index(last_chinese_char)
start, end = last_chinese_char_index - 1, last_chinese_char_index + 2
for i in all_chinese_in_unicode[start:end]:
print transfer(i),
print
Ubuntu 下的 zsh 中运行,只能显示到这个字符:龻,后面的都是乱码,这个字符对应的十六进制数是 9fbb
。
结果又意外发现,最后一个字符似乎不是 9fbb,而是 9fcc(改 URL 一个一个试出来的)。
来源:https://www.fileformat.info/info/unicode/char/9fcc/index.htm
对应文字图片:https://www.fileformat.info/info/unicode/char/9fcc/sample.png
当然,这个来源并不保证权威,也可能有错误,涉及中文字符的范围还是使用 4e00 - 9fff 比较保险。
比如正则表达式:[\u4e00-\u9fff]
。
标点符号
看来是需要抽半天空闲时间,仔细研究研究编码问题了。
参考
- 维基百科,Unicode 字符平面映射
- 维基百科,中日韓統一表意文字
- unicode.org,Unicode Technical Standard #18 - UNICODE REGULAR EXPRESSIONS
- unicode.org,Unihan Database Lookup
- Python 官方文档,7.8.3. Standard Encodings
- Python 官方文档,7.1.3.1. Format Specification Mini-Language
- CSDN 论坛,汉字的 unicode 码范围是多少
-
51CTO 博客,lover007,正则匹配中文及常用正则表达式 ↩