摘要: 中文编码与处理¶Python中的中文是个很头痛的问题,Python2和Python3都会出现,而且py2中出现的概率要大些。 接下来我们来讲讲Python中如何处理中文问题。 中文字符串¶Python中默认的编码格式是 ASCII 格式,在没修改编码格...
# -*- coding: UTF-8 -*-
# coding=utf-8
Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
'你好!我是Herry~'
python3中str默认为Unicode的编码格式。python2中str默认为bytes类型的编码格式。Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等。
所以在Python3中必须将str类型转换成bytes类型的。
在Python中使用encode的方式可以进行字符的编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
a = "中国"
a.encode("utf-8")
a.encode("gbk")
Python中str类型转bytes类型,相当与Unicode转gbk,utf-8
等类型。
b'
代表字符编码格式为bytes。
utf-8
默认24位占3个8位16进制数。
gbk
中国编码默认占16位2个8位16进制数字。
a_str = '开心qwq,哈哈,123.一二三'
import re
a_list = re.split(",|。|?|,|\.",a_str)
a_list
使用re.findall
方法匹配原字符串a_str
中数字和字母下划线的多个字符,形成新的序列res
。
res = re.findall(r'\w+', a_str, re.A)
res
将a_list
中的非中文序列res
移除,获得含有中文的字符串序列。这种方法只适配于可以被分割成纯中英文字符串的状况。
new_list = []
for i in a_list:
if i not in res:
new_list.append(i)
new_list
汉字的Unicode码表¶
正则表达式: [\u4e00-\u9fa5]
, 匹配汉字。依据汉字的Unicode码表: 从u4e00~u9fa5
, 即代表了符合汉字GB18030规范的字符集
a_list = re.findall(r'[\u4e00-\u9fa5]', a_str)
a_list
几个主要非英文语系字符范围:
2E80~33FFh
:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400~4DFFh
:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
4E00~9FFFh
:中日韩认同表意文字区,总计收容20,902个中日韩汉字。
A000~A4FFh
:彝族文字区,收容中国南方彝族文字和字根。
AC00~D7FFh
:韩文拼音组合字区,收容以韩文音符拼成的文字。
F900~FAFFh
:中日韩兼容表意文字区,总计收容302个中日韩汉字。
FB00~FFFDh
:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角
a_list = re.findall(r'[\u4e00-\u9fa5]', a_str)
a_list
a_list = re.findall(r'[^\x00-\xff]', a_str)
a_list