python2的中文问题

首先在控制台打印中文字符

import sys
reload(sys)
sys.setdefaultencoding('gbk')

python写的代码也是作为文件保存,所以也要作为文件保存,一般在在文件的开头添加

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

但是如果打开或者写入带有中文的文件或路径时,依然会报错,中文显示为乱码,这时用下述方法处理:

filepath = unicode(filepath,'utf8')
f = open(filepath,"r")

如果要深究,那就是字符串的编码问题了

    计算机只能处理1,0,任何东西都要转换成二进制数字才可以进行处理。计算机是先由美国人发明,只有127个字母被编码到计算机里,这个编码表称为ASCII编码。它仅包括大小写字母、数字还有一些符号。

那么问题来了,处理中文,日文,韩文这些该怎么办,所以才有后来的gb2312,shift_js,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此出现了Unicode.

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8等编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存,编辑完成后,保存的时候再把Unicode转换为UTF-8等保存到文件。

所以,当使用python时出现各种乱码的根源就可以找到。

Python的字符串类型是str,在内存中以Unicode存储,如果要保存在硬盘或者在网络传输,则使用的是bytes。

二者的转换方式:

str通过encode()将Unicode转换为bytes;反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。

另外,Python数据类型表示

Python对bytes类型的数据用带b前缀的单引号或双引号表示,如b'asd' Python对Unicode类型的数据用带u前缀的单引号或双引号表示,如u'asd',把u'xxx'转换为UTF-8编码的'xxx'用encode('utf-8')方法,反过来,把UTF-8编码表示的字符串'xxx'转换为Unicode字符串u'xxx'用decode('utf-8')方法。

因为在python2中,str和unicode是两码事,然而在python3中,将'xxx'和u'xxx'统一编码为Unicode。所以在python2打开中文路径的时候可以使用:

filepath = u'D:/datas/新建文件夹.txt'
f = open(filepath, "r")

转载于:https://my.oschina.net/asd945/blog/890988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值