首页 > 代码库 > Python中中文路径处理问题的研究
Python中中文路径处理问题的研究
a = ‘你‘ 为 str 对象
a = u‘你‘ 为 unicode 对象
>>> u浣
输出乱码
>>> u你
正常
>>> u浣
>>> print ‘u你‘ + ‘u‘
>>> u浣爑
输出乱码
>>> u你u
正常
出现错误 UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128)
分析:‘你‘在内存中 为 0xe4,而python默认的编码方案是ascii,ascii无法识别0xe4
>>> u你你
正常
8.
>>> print ‘u你‘ + u‘你‘
出现错误 UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 1: ordinal not in range(128)
9.
>>> print ‘u你‘.decode(‘utf-8‘) + u‘你‘
>>> u你你
正常
10.
而在处理由系统采集的含有中文的路径时,使用string.decode(‘utf-8‘)就不一定行了,因为简体中文的windows系统默认编码为gb2312,繁体中文版会采用Big5码
实验过程如下:
file_from = sys.argv[1] 为由系统采集的包含中文的路径
file_to = file_from[:file_from.rfind(‘\\‘)+1].decode(‘utf-8‘) + u‘你_‘ + file_from[file_from.rfind(‘\\‘)+1:].decode(‘utf-8‘)
file_to = file_from[:file_from.rfind(‘\\‘)+1].decode(‘gb2312‘) + u‘你_‘ + file_from[file_from.rfind(‘\\‘)+1:].decode(‘gb2312‘)
a = u‘你‘ 为 unicode 对象
1.
>>> print ‘u‘ + ‘你‘>>> u浣
输出乱码
2.
>>> print ‘u‘ + u‘你‘>>> u你
正常
3.
>>> print ‘u你‘>>> u浣
输出乱码
>>> print ‘u你‘ + ‘u‘
>>> u浣爑
输出乱码
5.
>>> print u‘u你‘ + ‘u‘>>> u你u
正常
6.
>>> print u‘u你‘ + ‘你‘出现错误 UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128)
分析:‘你‘在内存中 为 0xe4,而python默认的编码方案是ascii,ascii无法识别0xe4
7.
>>> print u‘u你‘ + u‘你‘>>> u你你
正常
8.
>>> print ‘u你‘ + u‘你‘
出现错误 UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 1: ordinal not in range(128)
9.
>>> print ‘u你‘.decode(‘utf-8‘) + u‘你‘
>>> u你你
正常
10.
而在处理由系统采集的含有中文的路径时,使用string.decode(‘utf-8‘)就不一定行了,因为简体中文的windows系统默认编码为gb2312,繁体中文版会采用Big5码
实验过程如下:
file_from = sys.argv[1] 为由系统采集的包含中文的路径
file_to = file_from[:file_from.rfind(‘\\‘)+1].decode(‘utf-8‘) + u‘你_‘ + file_from[file_from.rfind(‘\\‘)+1:].decode(‘utf-8‘)
print file_to
将出现错误:UnicodeDecodeError: ‘utf8‘ codec can‘t decode byte 0xbb in position 24: invalid start byte
应该使用:decode(‘gb2312‘)file_to = file_from[:file_from.rfind(‘\\‘)+1].decode(‘gb2312‘) + u‘你_‘ + file_from[file_from.rfind(‘\\‘)+1:].decode(‘gb2312‘)
print file_to 正常
11.
而如果file_from是由你自己写入的包含中文的路径,如file_from = ‘c:\你.txt’
那么就应该用decode(‘utf-8‘)
可以参考上面的第7点和第9点
不足及错误之处,请批评指正!!谢谢!!
参考文章:
Why you benefit from using UTF-8 Unicode everywhere in your web applications
Python "‘ascii‘ codec can‘t decode byte" explained and how to solve it
Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。