Python二汉语管理记录的得以达成情势,Python二汉语管理记录

python二不是以unicode作为主旨代码字符类型,遇到乱码的概率是遥远超越python3,但就算如此,相信广大人,也不想随便的动员搬迁到python③,这里就总计多少个本身平时蒙受的主题素材及解法。

Python第22中学文处理记录的兑现情势,python二纪要

python②不是以unicode作为中央代码字符类型,蒙受乱码的可能率是遥远大于python叁,但固然如此,相信广大人,也不想随便的迁移到python三,这里就总括多少个自己经常碰着的主题素材及解法。

一、文件中不能够使用普通话注释

拍卖格局:

在代码中追加# -*- coding=UTF-8 -*-,一般加在文件底部第二行,纵然第二行是脚本标识,则位居第1行(实际依然是python正本的首先行)。

进而将文件另存为UTF-捌格式。

此情势能够化解注释中有普通话,及字符串马上数中包罗普通话的题目。

贰、unicode汉语变量打字与印刷出来是乱码

拍卖办法:

文本开始引进扩大库的一些投入以下三行代码。

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

三、utf-8 及 gbk相互转变

向来看代码:

#utf-8字符串转换成GBK(GB2312及其它编码也是这样用)
print str.decode('UTF-8').encode('GBK')
#gbk转换成utf-8
print str.decode('GBK').encode('UTF-8')

4、参数中的utf-八是用小写依然小写?

一般性大小写都得以,那不是python决定的,是系统的言语代码设定调整的。

五、张开utf-八的文书文件

通过一、二的设置,平常直接展开就可以,文件是如何编码,读出来就是如何编码,个别仍有杰出的能够选择扩大库codecs:

import codecs
...
with codecs.open(poetry_file, "r","utf-8") as f:

6、print打字与印刷出来的协会中的汉字是乱码

print仅打字与印刷1个utf-八的变量是不会有题目标,举例

a="汉字"
print a
#会正常显示

不过1旦用了持续展现,比方:

print a,
#将会显示乱码

只就算其余协会,诸如dict / list / class等,都会油不过生乱码。

a = ["中文","测试"]
print a
#将会显示乱码

那种情形选拔基本库没有啥样好格局,只好循环每个打字与印刷内容,比如:

...
for item in items:
print item

抑或整合输出,比如:print ', '.join(a)

还是能使用第一方的包,比如:

import uniout
...
listnine = ['梨', '橘子', '苹果', '香蕉']
print 'listnine list: %s' % listnine

七、变量自个儿呈现平常,循环遍历出来的单个字符乱码

大约景况是因为字符串不是unicode编码。表明字符串的时候利用
a = u'汉字'这么情势赋值的变量都是Unicode字符串,不会有标题。

设借使从外部传入的变量,源头景况又不亮堂,能够品味调换到Unicode字符串:

str=unicode(str,"utf-8");

啊,大约就这一个,想到再补充。

上述正是本文的全部内容,希望对大家的学习抱有支持,也指望我们多多援救帮客之家。

python贰不是以unicode作为中央代码字符类型,遇到乱码的可能率是遥远超越python三,但即使如此,相信…

python二不是以unicode作为主导代码字符类型,蒙受乱码的概率是遥远超乎python3,但纵然如此,相信广大人,也不想随意的迁徙到python叁,这里就总括几个本人平时遇到的难题及解法。

文章介绍

用Python贰.+本子在调控台打字与印刷汉语怎么着不会乱码,一贯是麻烦多数Pythoner的主题素材,换来Python三又感到辛勤。乱码的来头就在于从一般网页、数据库或文本外来数据源上抓取过来的内容,必要经过科学的编解码才能够平常输出,而Python的编解码机制相比复杂,未有长远思量的话常常遇上调节和测试错误。那篇小说介绍了最普及的二种输出汉语的场地,编写翻译平台为Windows调控台,Python版本为二.七.9
小说中一些内容参考了点击展开链接
谢谢原来的书文者分享。

  1. 文本中无法利用中文注释
    管理方式:
    在代码中增加# -*- coding=UTF-8 -*-,一般加在文件底部第一行,假诺第一行是脚本标记,则放在第壹行(实际依然是python正本的第二行)。
    跟着将文件另存为UTF-八格式。
    此方法能够缓慢解决注释中有普通话,及字符串霎时数中隐含中文的标题。

  2. unicode中文变量打字与印刷出来是乱码
    拍卖措施:
    文件起头引进扩大库的壹部分投入以下三行代码。

一、文件中不能够使用汉语注释

预备知识

str和unicode
先是需求澄清楚str和unicode的区分。str是字节串,由unicode经过编码(encode)后的字节组成的。unicode才是实在意义上的字符串,由字符组成。在编制程序进度中,必须搞明白要拍卖的是str依然unicode,
使用对的拍卖办法(str.decode/unicode.encode)。3个简约的尺度是:不要对str使用encode,不要对unicode使用decode(事实上str能够选择encode的,但不提议如此做,这里就不再赘言了。
用上面包车型大巴代码剖断是还是不是为unicode/str:

[python] [view plain]
isinstance(u’哈哈你好’, unicode)
isinstance(‘哈哈你好’,str)
打字与印刷结果均为True。
utf-8还是gbk
那二种都是华语的编码格局,选拔中间哪1种都足以,但要注意的是必须一律档案的次序中都联合行使,不能够混合使用。****

Python二汉语管理记录的得以达成情势,Python二汉语管理记录。头顶注明coding=utf-八, a = ‘普通话‘ 其编码为utf-八
若底部声称coding=gb2312, a = ‘粤语‘ 其编码为gbk
1致类型中全数源文件底部统一3个编码,并且声明的编码要和源文件保留的编码壹致(编辑器相关)
PS:在源代码用作管理的硬编码字符串,统一用unicode

将其种类和源文件本人的编码隔断开, 独立无依据方便流程中各样位置处理。

拍卖方法:

代码完结

壹.最简易的事态,直接在代码行输出汉语,即中文字符串不是保存在变量里的,如下就能够落成:

[python] [view plain]

print u’哈哈你好’

这里是把汉语字符串’哈哈你好’解码成unicode字符串了,假设直接print
‘哈哈你好’则会展现乱码
二.假使汉语字符串是保留在字符串变量里,则 依据下边包车型地铁格局完毕:

[python] [view plain]

string=’哈哈你好’
print string.decode(‘UTF-8’)

规律其实是跟第三种情况壹致的,把汉语字符串’哈哈你好’解码成unicode字符串了
三.再繁杂一点,中文字符串是保留在元组、列表或许字典里应该怎么输出呢?因为只有str对象本领调用decode方法,tuple/list/dict调用decode会报错,可能你会说把这一个目的调换来str对象再调用decode,但那样很费劲且先后功用不高。能够调用json模块的dumps方法,如下:

[python] [view plain]

t_tuple=(‘哈哈’,’你好’)
t_list=[‘哈哈’,’你好’]
t_dict={1:’哈哈’,2:’你好’}
print json.dumps(t_tuple,encoding=’UTF-8′,ensure_ascii=False)
print json.dumps(t_list,encoding=’UTF-8′,ensure_ascii=False)
print json.dumps(t_dict,encoding=’UTF-8′,ensure_ascii=False)

要留意dumps方法里的多少个参数
总体代码和打字与印刷结果

[python] [view plain]

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

在代码中追加# -*- coding=UTF-8 -*-,一般加在文件底部第二行,若是第三行是脚本标记,则位居第二行(实际还是是python正本的首先行)。

– coding:UTF-8 –

  1. utf-八 及 gbk相互调换
    平素看代码:

随就要文件另存为UTF-8格式。

测试python输出汉语是不是乱码

import json

print u’哈哈你好’

string=’哈哈你好’
print string.decode(‘UTF-8’)

t_tuple=(‘哈哈’,’你好’)
t_list=[‘哈哈’,’你好’]
t_dict={1:’哈哈’,2:’你好’}
print json.dumps(t_tuple,encoding=’UTF-8′,ensure_ascii=False)
print json.dumps(t_list,encoding=’UTF-8′,ensure_ascii=False)
print json.dumps(t_dict,encoding=’UTF-8′,ensure_ascii=False)

在Windows调整台运营Python程序,输出结果为:

亚洲必赢官网 1

八种等级次序的华语输出均能够不乱码显示。
科学普及报错管理

  1. win7调节台打字与印刷报错——UnicodeEncodeError: ‘gbk’ codec can’t encode
    character u’\u200e’ in position 43: illegal multibyte sequence

(壹)出现UnicodeEncodeError –> 表达是Unicode编码时候的主题素材;
(2) ‘gbk’ codec can’t encode character –>
表达是将Unicode字符编码为GBK时候出现的题目;
那儿,往往最大的可能正是,本人Unicode类型的字符中,包括了有的不恐怕转移为GBK编码的有的字符。
消除办法是:
方案1:

在对unicode字符编码时,增添ignore参数,忽略不可能不只怕编码的字符,这样就足以平常编码为GBK了。
对应代码为:
[python] [view gbkTypeStr = unicodeTypeStr.encode(“GBK“,
‘ignore’);

方案2:

只怕,将其转移为GBK编码的超集GB18030 (即,GBK是GB18030的子集)
[python] [view plain]
gb18030TypeStr = unicodeTypeStr.encode(“GB18030“)

对应的获得的字符是GB18030的编码。

此措施能够缓慢解决注释中有汉语,及字符串马上数中包括普通话的主题材料。

#utf-8字符串转换成GBK(GB2312及其它编码也是这样用)
print str.decode('UTF-8').encode('GBK')
#gbk转换成utf-8
print str.decode('GBK').encode('UTF-8')

二、unicode粤语变量打印出来是乱码

  1. 参数中的utf-八是用小写还是小写?
    一般说来大小写都足以,那不是python决定的,是系统的言语代码设定调整的。

  2. 张开utf-8的公文文件
    透过一、贰的安装,常常直接张开就足以,文件是怎么编码,读出来正是怎么编码,个别仍有丰富的能够行使扩张库codecs:

拍卖方法:

文件伊始引进扩充库的有的到场以下三行代码。

import codecs
...
with codecs.open(poetry_file, "r","utf-8") as f:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
  1. print打字与印刷出来的构造中的汉字是乱码
    亚洲必赢官网,print仅打字与印刷二个utf-8的变量是不会有标题标,举个例子

三、utf-八 及 gbk相互调换

直白看代码:

a="汉字"
print a
#会正常显示
#utf-8字符串转换成GBK(GB2312及其它编码也是这样用)
print str.decode('UTF-8').encode('GBK')
#gbk转换成utf-8
print str.decode('GBK').encode('UTF-8')

不过假使用了后续展现,例如:

肆、参数中的utf-八是用小写还是小写?

print a,
#将会显示乱码

一般大小写都足以,那不是python决定的,是系统的语言代码设定调控的。

只若是其他协会,诸如dict / list / class等,都会现出乱码。

5、展开utf-八的公文文件

a = ["中文","测试"]
print a
#将会显示乱码

透过1、二的安装,平常直接展开就足以,文件是怎么编码,读出来正是怎么编码,个别仍有格外的能够应用扩充库codecs:

那种情景选拔基本库未有怎么好点子,只可以循环各种打字与印刷内容,比如:

import codecs
...
with codecs.open(poetry_file, "r","utf-8") as f:
...
for item in items:
    print item

陆、print打字与印刷出来的结构中的汉字是乱码

依然整合输出,比如:print ', '.join(a)
还足以行使第一方的包,举个例子:

print仅打字与印刷多少个utf-8的变量是不会有标题标,比方

import uniout
...
listnine = ['梨', '橘子', '苹果', '香蕉']
print 'listnine list: %s' % listnine
a="汉字"
print a
#会正常显示
  1. 变量自身突显寻常,循环遍历出来的单个字符乱码
    可能情状是因为字符串不是unicode编码。申明字符串的时候利用a = u'汉字'那般格局赋值的变量都以Unicode字符串,不会有标题。
    如假诺从外部传入的变量,源头情状又不驾驭,可以品味调换来Unicode字符串:

可是借使用了继续突显,举个例子:

print a,
#将会显示乱码
str=unicode(str,"utf-8");

假定是别的组织,诸如dict / list / class等,都会现出乱码。

哦,大概就这一个,想到再补充。

a = ["中文","测试"]
print a
#将会显示乱码

这种情状采用基本库未有怎么好点子,只可以循环各个打印内容,比方:

...
for item in items:
print item

要么整合输出,比方:print ', '.join(a)

还足以动用第一方的包,比方:

import uniout
...
listnine = ['梨', '橘子', '苹果', '香蕉']
print 'listnine list: %s' % listnine

7、变量自身彰显符合规律,循环遍历出来的单个字符乱码

差不离意况是因为字符串不是unicode编码。申明字符串的时候使用
a = u'汉字'那般格局赋值的变量都以Unicode字符串,不会有标题。

一经是从外部传入的变量,源头景况又不清楚,可以尝尝转变来Unicode字符串:

str=unicode(str,"utf-8");

嗯,差不离就这几个,想到再补充。

以上正是本文的全部内容,希望对大家的求学抱有支持,也愿意我们多多支持脚本之家。

网站地图xml地图