导航:首页 > 编程语言 > Python不识别中国字

Python不识别中国字

发布时间:2023-05-16 05:31:35

python 无法显示汉字

实际上,这段代码所出现的问题和cPickle模块没什么关系。而是Python 2显示中文“乱码”的问题。
Python 2中,str是8-bit string sequence(有点像Python 3中的bytes)。而Python 3中str就相当于Python 2中的unicode。
所以,

>>>a='上海'
>>>repr(a)
"'\xc9\xcf\xba\xa3'"
>>>a#a中存储的8字节转义字符序列
'xc9xcfxbaxa3'
>>>printa#输出a,在此过程中,会对a进行解码操作,然后输出
上海

上例中,可以看到:
a = '上海'
a中实际存储的是:
'xc9xcfxbaxa3'
这样一个字节序列。它实际上是对'上海'这个unicode字符串按gbk/cp936/gb18030编码得到的(和简体中文Windows操作系统的默认编码有关)。
给你推荐一篇博客:
http://blog.csdn.net/kiki113/article/details/4062063

下面是我写的示例:

#_*_coding:gbk_*_

#TestwithPython2.7,Python3.3onWindowsXP

try:
importcPickleasp
except:
importpickleasp

address_file='address.txt'

classHuman(object):
def__init__(self,address):
self.address=address

deftxl(self):
af={'address':self.address}
print(af)
print(af['address'])
f=open(address_file,'wb')#Inpython3,usebinarymode.
#Inpython2.7,defaultprotocolis0.
#However,itis3inpython3.3.
p.mp(af,f,0)
f.close()

address='上海'
print(address)

dq=Human(address)
dq.txl()

af=open(address_file,'rb')#
print(p.load(af))
af.close()

"""
Output
----------------------------------------
Python2.7.6:
1.#-*-coding:utf-8-*-
涓婃捣
{'address':'xe4xb8x8axe6xb5xb7'}
涓婃捣
{'address':'xe4xb8x8axe6xb5xb7'}
2.#-*-coding:gbk-*-or#_*_coding:cp936_*_
上海
{'address':'xc9xcfxbaxa3'}
上海
{'address':'xc9xcfxbaxa3'}

Python3.3.3:
上海
{'address':'上海'}
上海
{'address':'上海'}
------------------------------------------
InPython3.3.3:
>>>'上海'.encode('utf-8')
b'xe4xb8x8axe6xb5xb7'
>>>_.decode('cp936')
'涓婃捣'
"""

从这个示例中可以看出,虽然把字典整个print出来不能正常解析address中的内容:

>>>addr={'addr':'上海'}
>>>addr
{'addr':'xc9xcfxbaxa3'}
>>>printaddr
{'addr':'xc9xcfxbaxa3'}

但是单独打印:

>>>addr['addr']
'xc9xcfxbaxa3'
>>>printaddr['addr']#print输出之前隐含了编码解码操作,但为何打印整个字典时输出不正常尚待研究
上海

一切OK。
所以,如果真的用Python 2的话,对于该问题可以考虑手工负责编码、解码操作(如果使用print单独打印地址信息,就不用这么麻烦了,因为这些事它帮你做了)。用Python3,就没这么多问题了。


最后补充一点,pickle模块只是提供了一种序列化Python对象的方法。所以序列化生成的文件中和想象的不一样也不足为奇。正如自由de王国所说的,只要序列化后还能够反序列化成功就行了。实际上,当protocol不是0的情况下,序列化生成的文件是二进制格式的,根本没法用记事本直接看。

② python与pygame显示中文的问题,SimHei就可以,"宋体"就不行!

pygame.font.SysFont('SimHei',36)这个api是pygame写的,你写中绝模文'宋体'不一定可以找到这个字体,具体要看这液李个api的实现方式。

你可以并埋缓用pygame.font.get_fonts()来查看系统支持那些字体,我这里用这个api查看,宋体对应的名称应为:simsunnsimsun。因此使用宋体应改为:

font=pygame.font.SysFont('simsunnsimsun',36)

③ python3.3版本,导入带有中文字符的.py文件 提示 (unicode error) 'utf-8' codec can't decode

该city模块中包含非utf-8编码的中文字符,选择一个合用的python编辑工具: scite, geany, sublime_text, notepad++ .. 等均可, 这些编辑碰圆搏器都支持在保存文件时指定编码格式。

④ python2.7测试print出汉字,报错

别使用notepad++这样的东西裂知陪。如果你想在程序里放入汉字肆蠢,最好使用idle。否则你最好设置编辑器一直使用UTF-8。不管猛袜是notepad++, subslime还是eclipse,这方面都比不上idle好用。

idle会自动按coding:xxxx编码方式存贮。其它的编辑器不会。

另外不要使用gb2312,许多汉字在这个字符集里没有。你要用gbk或者是gb18030

在idle里编辑上面的文件。把gb2312改成gb18030,这样就没有问题了。
试试看

⑤ 如何解决Python中文问题

python的中文问题一直是困扰新手的头疼问题,Python的发行版至今尚未包括任何中文支持模块。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。 笔者使用的是2.5版本。Python的版本可以通过调用sys模块的sys.version查看。在几个月的学习中,主要遇到以下问题:

1. print打印中文的问题:

在编辑器中输入一段测试代码:

s=’测试’

print s
运行结果如下:

Non-ASCII character '\xb2' in file c:\Documents and Settings\Administrator\桌面\2.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details: 2.py, line 1, pos 0

原因是如果文件里有非ASCII字符,需要指定编码声明。把2.py文件的编码重新改为utf-8,并加上编码声明:

# -*- coding: utf-8 -*-

s=’测试’

print s
运行后可以正确打印中文。

2.中文路径的问题。

在D盘下保存一个名字为‘中文.txt‘的文件。运行如下测试代码:

# -*- coding: utf-8 -*-

f=open('D:\\中文.txt', 'r')

print f.read()
运行结果如下:

IOError: [Errno 2] No such file or directory: 'D:\\\xe4\xb8\xad\xe6\x96\x87.txt'

字符串有很多的编码,不同的系统和平台有各自的编码 ,为了实现系统或平台之间的信息交互可能需要编码转换。这里只需要先使用UNICODE编码一下,这样再读取中文路径就不会有问题了:

复制代码

# -*- coding: utf-8 -*-

path='D:\\中文.txt'
spath=unicode(path , "utf8")
f=open(spath,'r')
print f.read()
复制代码
然后就可以正确显示文件内容

总结:

所有的中文显示问题都可以归结为编码问题,遇到其他类似的问题,那只能仔细看文档,靠你的经验,靠你多做测试。而且根据python所报出来的错误一般也可以判断出来。那么当发现需要编码转换时,剩下的就是如何正确进行码制转换。

为了正确处理多语言文本,Python在2.0版后引入了Unicode字符串。从那时起,Python语言中的字符串就分为两种:一种是2.0版之前就已经使用很久的传统Python字符串,一种则是新的Unicode字符串。在Python语言中,一般的解决办法是使用unicode()内建函数对一个传统Python字符串进行“解码”,得到一个Unicode字符串,然后又通过Unicode字符串的encode()方法对这个Unicode字符串进行“编码”,将其“编码”成为传统Python字符串。

⑥ python 的注释中不能用汉字的解决办法

开始学python,编的函数居然不能用汉字注释顷猜枣兆码,网上查了一下,在文雀拆件的头2行加入

# -- coding: utf-8 --

就可以了

如下面的函数,运行就不会报错了

# 计算面积的函数

def cal_area(  width , height ):

return width*height

OK!

⑦ 请问,python打开中文字符文件,但显示不出中文怎么办

一般是编码格式的问题,python内部默认的编码格式是utf-8,常见的文本编码格式是utf-8,gbk。编码格式不不一致就会乱码。可以在代码前面申明编码格式。

⑧ python 判断是不是中文字

法一:

isinstance(s, str) 用来判断是否为一般字符串

isinstance(s, unicode) 用来判断是否为unicode



if type(str).__name__!="unicode":
str=unicode(str,"utf-8")
else:
pass

法二:

Python chardet 字符编码判断
使用 chardet 可以很方便的实现字符串/文件的编码检测。尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要的,虽然HTML页面有charset标签,但是有些时候是不对的。那么chardet就能帮我们大忙了。

chardet实例
>>> import urllib
>>> rawdata = urllib.urlopen('http://www.google.cn/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
>>>chardet可以直接用detect函数来检测所给字符的编码。函数返回值为字典,有2个元数,一个是检测的可信度,另外一个就是检测到的编码。

chardet 安装
下载chardet后,解压chardet压缩包,直接将chardet文件夹放在应用程序目录下,就可以使用import chardet开始使用chardet了。

或者使用setup.py安装文件,将chardet拷贝到Python系统目录下,这样所有的python程序只要用import chardet就可以了。

⑨ 为什么我在python中输入的中文总不能显示呢

python报错invalid character in identifier,意思就是“标识符中的无效字符”,检查下有没有字符是中文的,把中文字符改成英文字符再运行就可以了。

Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。

一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。

因为自从C这类的困皮语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(汪芹差包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

(9)Python不识别中国字扩展阅读

Python 中文编码:

Python中默认的编首和码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

解决方法为只要在文件开头加入# -*- coding: UTF-8 -*-或者# coding=utf-8就行了

注意:# coding=utf-8的=号两边不要空格。

实例:

(Python 2.0+)

#!/usr/bin/python

# -*- coding: UTF-8 -*-

print( "你好,世界" )

输出结果为:

你好,世界

阅读全文

与Python不识别中国字相关的资料

热点内容
江苏税务服务器异常云主机 浏览:469
有溯源码一定保真吗 浏览:997
云服务器建设方案 浏览:986
jquery源码讲解 浏览:280
宝马app如何发帖 浏览:861
重庆服务器托管商云空间 浏览:439
浦发银行app如何调流水 浏览:677
玉石鉴赏pdf 浏览:842
为什么小度APP一直连不上网络 浏览:163
pdf模板java 浏览:40
现代瑞纳的压缩比 浏览:128
网吧里的ftp服务器有什么用 浏览:872
程序员年终总结工作体会 浏览:153
pdf可以直接打印 浏览:661
android刷wp8 浏览:912
历史地图集pdf 浏览:926
快手app极速版怎么扫码 浏览:805
qq程序员玩法 浏览:96
1是什么门电路app 浏览:867
博之轮运动手表用什么app 浏览:646