当前位置:首页 » 编程语言 » python中文ascii

python中文ascii

发布时间: 2024-12-20 08:03:39

‘壹’ python输出到文件乱码如何解决

python代码文件的编码
py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character。需要在代码文件的第一行或第二行添加编码指示:
1 # coding=utf-8 ##以utf-8编码储存中文字符
2 print '中文'
像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下三种方式:
1 s1 = u'中文' #u表示用unicode编码方式储存信息
2 s2 = unicode('中文','gbk')
unicode是一个内置函数,第二个参数指示源字符串的编码格式。
decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。
encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。
(2)、字符串的编码
用 u'汉字' 构造出来的是unicode类型,不用的话构造出来是str类型
str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值
所以从unicode转str,要用encode方法
从str转unicode,所以要用decode
例如:
# coding=utf-8 #默认编码格式为utf-8
s = u'中文' #unicode编码的文字
print s.encode('utf-8') #转换成utf-8格式输出
但当python中间处理非ASCII编码时,经常会出现如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的数字,python在默认的情况下认为语言的编码是ascii编码,所以无法处理其他编码,需要设置python的默认编码为所需要的编码。
一个解决的方案是在代码中添加:
import sys
reload(sys)
sys.setdefaultencoding('utf-8') (其中utf-8为你想输出的字符编码)
解释:
sys.setdefaultencoding方法在python导入site.py后就删除了(具体代码查看site.py就可以看到)因此如果想用的话可以再重新load进入
总结:
u=u'unicode编码文字'
g=u.encode('gbk') #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode('gbk').encode('utf-8') #以gbk编码格式读取g(因为他就是gbk编码的,需要事先知道它是GBK编码)并转换为utf-8格式输出
print str #正常显示中文(同文件输出)
安全的方法:
s.decode('gbk','ignore').encode('utf-8′) #以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码,转换成utf-8编码输出。
推荐学习《Python教程》!

‘贰’ python123汉字的unicode编码值

python的默认编码是ascii,可以通过sys.setdefaultencoding('utf-8')函数设置python的默认编码。

python中可以通过encode和decode的方式改变数据的编码,比如:

>>> u'汉字'

u'\u6c49\u5b57'

>>> u'汉字'.encode('utf-8')

'\xe6\xb1\x89\xe5\xad\x97'

>>> u'汉字'.encode('utf-8').decode('utf-8')

u'\u6c49\u5b57'

我们可以通过这两个函数设置编码。

那么,python中的str是什么类型?

>>> import binascii

>>> '汉字'

'\xba\xba\xd7\xd6'

>>> type('汉字')

>>> print binascii.b2a_hex('汉字')

babad7d6

>>> print binascii.b2a_hex(u'汉字')

Traceback (most recent call last):

File "", line 1, in

UnicodeEncodeError: 'ascii' codec can't encode characters in

position 0-1: ordinal not in range(128)

>>> print binascii.b2a_hex(u'汉字'.encode('utf-8'))

e6b189e5ad97

>>> print binascii.b2a_hex(u'汉字'.encode('gbk'))

babad7d6

binascii是将数据的二进制转换成ascii,上面的解释是:‘汉字'的类型是str,二进制是babad7d6,u‘汉字'是无法转换成ascii,这样就报出了开头的第一个错误。解决办法就是把它.encode(‘utf-8')成str类型。因为我命令行是windows默认的GBK编码,所有u'汉字'.encode(‘gbk')的时候,输出结果和‘汉字'结果一样。

热点内容
存储器层次结构 发布:2024-12-20 19:07:15 浏览:343
安卓手机p图app哪个最好 发布:2024-12-20 19:01:41 浏览:230
安卓系统是用什么下载软件 发布:2024-12-20 18:56:37 浏览:631
php流水号 发布:2024-12-20 18:51:07 浏览:83
截取字符串的函数sql 发布:2024-12-20 18:39:29 浏览:332
php超市系统 发布:2024-12-20 18:28:13 浏览:35
涿州北的服务器叫什么 发布:2024-12-20 18:26:17 浏览:568
买贵的安卓和便宜的苹果哪个好 发布:2024-12-20 18:20:30 浏览:199
GGA源码 发布:2024-12-20 18:15:08 浏览:519
无法连接服务器1104是什么代码 发布:2024-12-20 18:05:28 浏览:73