当前位置:首页 » 编程语言 » 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')的时候,输出结果和‘汉字'结果一样。

热点内容
墨泥加密锁 发布:2025-03-12 02:15:40 浏览:340
我的世界网易开局就32k的服务器 发布:2025-03-12 02:07:42 浏览:695
怎么用电脑搭建免费服务器 发布:2025-03-12 02:01:43 浏览:612
mysql存储过程和函数 发布:2025-03-12 01:56:36 浏览:188
srt流媒体服务器搭建 发布:2025-03-12 01:55:37 浏览:547
如何查找ftp电影下载资源 发布:2025-03-12 01:37:37 浏览:387
一加保存的密码在哪里 发布:2025-03-12 01:13:06 浏览:90
微信第三方平台源码 发布:2025-03-12 01:12:21 浏览:782
服务器关闭怎么补偿 发布:2025-03-12 01:01:26 浏览:335
c语言复数的四则运算 发布:2025-03-12 01:01:22 浏览:804