前言
Python文件的默认编码格式是ascii,因为ascii码中没有中文,所以无法识别汉字。
因此,在py文件中写入汉字时,通常会在开头添加# -*- coding: utf-8 -*-或#coding=utf-8。
这指定了一种编码格式,这意味着汉字(gbk、gb2312等。)以这种编码方式存储。
关于测试的一些注意事项。
注意1:如果代码中有中文,应该在表头指定编码方式。如果用编辑器写代码,还要注意IDE的文件存储编码格式(通常在设置中)
注Python 3的源代码文件。x默认采用utf-8编码,可以解析中文,不需要一开始就指定,但是为了规范和避免一些意想不到的问题,还是指定比较好。
注3:3:Linux交互命令(左)和py文件(右)的运行结果会有所不同:
左图中,由于我的cmd设置了gbk编码格式,u是s使用gbk解码的unicode对象,支持解码可以在打印下正常显示原汉字,所以再次使用gbk编码;在右边,py文件指定了utf8编码,所以u是s使用utf8解码的unicode对象(其他方法会运行不正确),如果要在屏幕上打印中文,必须将其编码为cmd设置的编码(其他方法显示乱码字符)。
注4:测试汉字显示和匹配时,最好用py文件写,否则两边不同时会很尴尬
-
以下实验基于python2.7和linux系统,不测试windows控制台和IDE窗户下面;
下面的实验是关于中文正常显示和中文规则匹配的转码测试。
(一)python字符串和中文字符串
简单理解,编码就是unicode-ch-str,解码就是ch-str-unicode,
关于打印显示中文。例如,使用gb18030和utf-8编码的两个内容相同的文档进行测试:
# coding=utf-8 import sys,open('ch_input_gbk ',' r ')为f1,open('ch_input_utf ',' r ')为f2:用于f1:行中的=l1.strip()。split(' T ')# line是一个列表,通过打印它,可以看到不同代码的内容str send=line[0]# send是ch-str打印行,send for L2 in f 2: line=L2 . strip()。拆分(' T ')发送=行[0]打印行,发送打印发送。解码(' utf8 ')。编码(' gbk') #打印字符串(已发送)。解码(' string _ escape ')。解码(' utf8 ')。编码(' gbk ')
[' xd3 xc4 xc8 xcb xd6 xf1 xc9 xa3 xd4 xb0 ']幽静的竹桑园[' xb9 xe9 xce xd4 xbc xc5 xce xde Xfb ']我现在看到的东西[' xb4 xb4 xcb xd3 Xfb xce xde xd1 xd4 ']我想从此无言以对[' xe5 xd4 ' xe4 xba xba X92 xe5 x8d xa7 xe5 xaf x82 xe6 x97 xa0 xe5 x96 x97 '】,“你会很开心的”Xbb x8e xe6 xad xa4 xe6 xac xb2 xe6 x97 xa0 xe8 xa8 X80 '】我想从此沉默。
发送线路11和f2的乱码显示是因为txt是utf8代码,读取后仍然是这样,但print根据cmd设置的编码格式解释str
由于utf8解码-unicode编码为gb18030,所以第12行和发送的可以正常显示,所以打印可以正常解释
第13行,有时候中国人读或者抄的不是 xc4而是这样的 xc4。这是转义的,因此无法通过解码转换进行编码。首先,使用str(发送)。decode ('string _ escape ')删除反斜杠的转义,然后它与第12行相同。
附件,第12行,如果你直接写send . encode(' gbk '),你会报告一个错误:
unicode decoderderror :“ascii”编解码器无法解码位置0中的字节0xe5
也就是说,当前位置的字符串不能用py默认ascii解码,因为它是中文字符串;要使用其实际编码来解码而不是ascii:
一修改巴拉圭默认编码,由美国信息交换标准码修改为当前潜艇用热中子反应堆(submarine thermal reactor的缩写)实际编码(utf8或gb18030等)
reload(sys)sys . setdefaultencoding(' utf8 ')2但是读入含多个文档的多个编码方式时,1的方法就不方便,还是对不同的ch-str都采用采用双字节对字符进行编码转换编码比较好(上面例子中的方式)
(二)中文字符串的正则匹配
只有一项标准,匹配字符串和原字符串编码统一,
还是例子,
# #-* -编码: utf-8-* -导入重新指定部件(注册、文本、名称): RES=re.find all(注册、文本)打印区域% d % s部件: % (指示灯(红色), 名称)为第:号决议打印r。编码(《GBK》)样本=""en :常规表达式是一个性能工具“jp:正则表达式是处理非常有用的工具文本。日本航空:日本航空:3360 《》 % & * # % * #"#将utf8转换为unicode u sample=unicode(示例,utf8 ' ) #相当于USA sample=sample . decode(' utf8 ')#获取每个语言部件3360查找部件(u ' [ _ 4e 00-_ 9fa5],utf8 ' ) uac00-ud7ff]",u样本,"统一代码仓库"查找部件(u ' [u30A0-u30ff ],u样本,"统一代码仓库“unicode日语平假名’)查找部件(u '[ u 3000- ufb 00- uffd],u样本,' unicode cjk计算机]
第7行,usample是unicode,想要打印正确显示,则需要r.encode('gbk '),根据煤矿管理局的编码格式;
正则匹配规则不多述?-u?]是不同语言的采用双字节对字符进行编码编码段,该例出口是、
中文6个零件:正则表达式是一种很有用的处理文本的工具,正则表达式,非常,角色,立,操作
8个韩文部分:
中文片假名6个零件:工具文本、啊、啊、啊、啊、啊
中文平假名11个零件:是、是、是、是、是、是、是、是
非英文标点四个第二部分.《》 %&*#
另有简单的正则匹配,举几个例子,
s1='天天向上天天向上打印(RE。sub(UR '[ U4E 00- U9F 5]{ 1,} ',u'1 ',S1。解码(' UTF8 ')。编码(.S1。解码(' UTF8 ')。编码(“GBK”)# 1向上一提升打印(RE。Sub (UR ' ([ _ 4E 00-_ 9FA5] )1{2 ',S1。解码(' UTF8 ')。编码(“GBK”)# 1提高天天向上s2='【aa】天天[电子邮件保护] '打印(' UR '】。*】) S2。解码(' UTF8 ')。编码(“GBK”)# 1天天[电子邮件保护]打印(re.sub(用户@ ',u'1,S2。编码)
第3行,()内为一个群组,1指第一个群组,{1,}要重新匹配1~n个前面组内容(若组内为一个字,{1,}要匹配2个及所在的字),已故匹配了3个天和2个天
第6行和7,中英文标点符号匹配,regex没有转义符的话可以不写r,若文本全是英文也不可以不写u
以上这篇浅谈大蟒下含中文字符串正则表达式的编码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。