unicode常用范围

爬虫从网站上爬取的内容在读写操作时经常会报以下错误:

UnicodeEncodeError: 'gbk' codec can't encode character '00b' in position 7: illegal multibyte sequence

所以需要我们对数据Unicode进行清洗,排除文章内异常的Unicode符号。

清洗思路

我的思路是用正则表达式来匹配常用字,不在范围内的Unicode编码则去除。

.compile(u"[^常用字范围]+")匹配到非范围内字符后,

.sub()方法将特殊字符替换成空

1
2
3
4
5
6
7
8
9
10
11
12
13
def illegal_char(s):
s = re \
.compile(
u"[^"
u"\u4e00-\u9fa5"
u"\u0041-\u005A"
u"\u0061-\u007A"
u"\u0030-\u0039"
u"\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009"
u"\!\@\#\$\%\^\&\*\(\)\-\=\[\]\{\}\\\|\;\'\:\"\,\.\/\<\>\?\/\*\+"
u"]+") \
.sub('', s)
return s

Unicode范围

常用范围

名称 范围
中文 \u4e00-\u9fa5
日文平假名 \u3040-\u309f
日文片假名 \u30a0-\u30ff
韩文 \uac00-\ud7ff
英文字母 \u0041-\u005A,\u0061,\u007A
数字 u0030-u0039
英文标点 !@#$%^&()-=[]{}\;':",./<>?/+
中文标点 使用下面的中文标点挨个匹配

注:网上有种方法写的中文标点匹配是 000-03f-,但01c,仍然会报错,建议将中文标点挨个匹配

中文标点对应

名称 Unicode 符号
句号 \u3002
问号 \uFF1F
叹号 \uFF01
逗号 \uFF0C
顿号 \u3001
分号 \uFF1B
冒号 \uFF1A
引号 \u300C
\u300D
\u300E
\u300F
\u2018
\u2019
\u201C
\u201D
括号 \uFF08
\uFF09
\u3014
\u3015
\u3010
\u3011
破折号 \u2014 ——
省略号 \u2026 ……
连接号 \u2013
间隔号 \uFF0E
书名号 \u300A
\u300B
\u3008
\u3009

非英文语系字符范围

范围 编码 说明
2E80~33FFh 中日韩符号区 收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400~4DFFh 中日韩认同文字扩充A区 中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
4E00~9FFFh 中日韩认同表意文字区 中日韩认同表意文字区,总计收容20,902个中日韩汉字。
A000~A4FFh 彝族文字区 收容中国南方彝族文字和字根
AC00~D7FFh 韩文拼音组合字区 收容以韩文音符拼成的文字
F900~FAFFh 中日韩兼容表意文字区 总计收容302个中日韩汉字
FB00~FFFDh 文字表现形式区 收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。