python的中文编码问题:报错 -问答-阿里云开发者社区-阿里云

开发者社区> kun坤> 正文

python的中文编码问题:报错

2020-06-07 14:42:07 194 1

我很想就这个问题做个详细的解释,但也许水平有限,解释的不是很清楚,甚至自己理解的都不正确,那么我将长期修改

我使用pyscripter来作为编辑器,首先在pyscriter上打上这么一行代码

  运行,我们看到下面的运行结果 

然后使用notepad++打开这个python文件,如下截图:


源文件中中文乱码了,并且python运行的结果中文也乱码了

原因:

python源文件默认使用的ascii码作为编码方式,在notepad++中我们查看编码方式,可以发现这点儿,所以中文注释保存的话就乱码了

解决方法:

在pyscripter开头用一行

#_*_encoding:utf-8_*_

这就指明了源文件的编码格式为 utf-8,在运行发现结果如下

使用notepad++打开,发现中文已经不在乱码,并且查看编码方式已经成了utf-8


文件有不同的编码方式,常见的中文编码有utf-8和gb2312两种,那么我们来看python是如何处理中文的!

首先创建两个txt文档,test1.txt和test2.txt,内容都是“你好,世界!”两种分别用utf-8编码保存和ANSI编码保存,中文的ANSI就是gb2312,然后使用pyscripter写代码读取这两个文件,代码如下


运行结果如下:


我们看到使用utf8编码的读取出来已经乱码了,而gb2312编码的却没有乱码,那么是不是python默认打开文件的方式是gb2312呢?我们接着实践,从实践中获取答案,重写代码如下:


运行结果如下:

解释前我们先看下面几个函数:

一、python中与编码有关的函数
1、encode:由unicode编码转换为指定的其他编码。如:txt.encode("gb2312")则txt的表示为unicode->gb2312;txt.encode("utf-8")为unicode->utf-8转换。
2、decode:由指定的其他编码转换为unicode编码。如:txt.decode("gb2312")则txt的表示为gb2312->unicode;txt.decode("utf-8")为utf-8->unicode转换。
3、unicode:与decode相同。如:unicode(txt,"gb2312") 则txt的表示为gb2312->unicode转换。

当然了unicode是不能和ASCII之间转换的

所以不难理解,content1实际是utf8格式的编码,转换为unicode之后就正确显示了,但是为什么直接打印utf8格式的字符串却不行呢?我也不知道哦,那么我们再来试试下面这种方式


运行结果如下:


打开文件 test_utf8.txt文件时候,就指定了文件的编码方式为utf8

在向xml文件中写入中文的时候,如果xml的编码方式问utf-8,打开xml时候要指定xml文件的编码方式为utf-8,

impl = minidom.getDOMImplementation()
dom = impl.createDocument(None, 'Record', None)
root = dom.documentElement
for node_tag in self.record_filed_name:
            node = dom.createElement(node_tag)
            node.setAttribute("value","")
            root.appendChild(node)

f= codecs.open(TEMPLATE_FILE, 'w','utf-8')
dom.writexml(f, addindent='  ',newl='\n',encoding='utf-8')
f.close()

或者使用如下方式来写入中文:

sys.setdefaultencoding('gb18030')

正常的open(),而不用指定codecs编码格式,也可以。这样的python源文件编码就是gb18030了


似乎minidom不能处理编码方式是gbk的xml,因此建议使用utf-8格式的xml,网上给出了一种处理方法

f = codecs. open (dest_file, 'rb' , 'gbk' )
tmp = f.read().encode( 'utf-8' )
f.close
text = tmp.replace( "gb2312" , "UTF-8" )
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-07 14:42:14

    也可以修改python原文件

    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 123728浏览量 回答数 4

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157090浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 92905浏览量 回答数 28

3

回答

Logstash采集文件名称以及自定义格式的日志文件采集

Snorlax 2019-06-18 11:51:28 114661浏览量 回答数 3

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146795浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145636浏览量 回答数 31

1

回答

出现这个问题求解决This XML file does not appear to have any

淘合肥 2017-04-08 21:07:00 89288浏览量 回答数 1

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 135565浏览量 回答数 42

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302613浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 471462浏览量 回答数 24
+关注
0
文章
13401
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载