Python中中文路径处理问题的研究

a = ‘你‘ 为 str 对象

a = u‘你‘ 为 unicode 对象

1.

>>> print ‘u‘  + ‘你‘

>>> u浣

输出乱码

2.

>>> print ‘u‘  + u‘你‘

>>> u你

正常

3.

>>> print ‘u你‘

>>> u浣

输出乱码

4.

>>> 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 这三种编码模式有什么区别?

Python中中文路径处理问题的研究,布布扣,bubuko.com

时间: 2024-10-05 16:55:28

Python中中文路径处理问题的研究的相关文章

Sublime Text 2 运行 Python 脚本中文路径解决方法

在 SublimeText 中直接运行 Python 脚本,出现以下报错提示: Running python -u C:\Documents and Settings\Administrator\桌面\furl.py Traceback (most recent call last): File ".\sublime_plugin.py", line 340, in run_ return self.run(**args) File ".\exec.py", lin

python中os路径相关的函数 os.mkdir和os.makedirs

传送门:http://blog.csdn.net/shennongzhaizhu/article/details/51455063 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). os.mkdir(path) 例如要在D盘下创建hello的目录 >>> import os >>> os.mkdir('d:\hello') 其原型如下所示: 其参数path 为要创建目录的路径(创建多级目录) >>> import os >

Python中中文输出显示以及列表初始化坑坑

通过网查得出,使用json中的dumps方式可以解决问题.一般在需要输出得上一步使用,这样可以便于其他错误得产生 import json # result = json.dumps(b, encoding='UTF-8', ensure_ascii=False)# list1 = ["陈","湖北"]# result = json.dumps(list1, encoding='UTF-8', ensure_ascii=False)# print result 这里在

解决python中join路径分隔符跨平台移植性

在Windows中路径分隔符是"\",而Linux中则是"/".这样一来,如果我们写了这样一段代码: 1 import os 2 3 print(os.path.join('C:\\', 'a', 'b.txt')) 在Windows中运行时是没有问题的,但是在Linux当中就有问题了,反之亦然.但是,我们可以用os.sep来指代当前系统所用的路径分隔符: 1 import os 2 3 print(os.path.join('C:',os.sep,'a', 'b.

Python中的字符串与字符编码

原文地址:点击这里 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章.有的人云亦云,也有的写得很深入.近日看到某知名培训机构的教学视频中再次谈及此问题,讲解的还是不尽人意,所以才想写这篇文字.一方面,梳理一下相关知识,另一方面,希望给其他人些许帮助. Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码:Python3的

在Python中处理中文路径

最近在Windows下使用Python进行Swift API的开发,其中对象(相当于文件)上传和下载会涉及到中文路径,可是纠结了好长时间,总是提示路径不存在,后来经过多方查找资料和咨询,终于找到问题所在.对文件路径需要使用Unicode编码: local_path = unicode(local_path, 'utf8) file = open(local_path, 'rb') 文章出自:http://blog.csdn.net/twlkyao/article/details/26715443

python中由于中文路径引起的os.path.isfile(imgpath) == False问题

昨天在用python脚本处理文件的时候,遇到了题述问题,明明文件时存在的,但是在用os.path.isfile(imgpath) == False进行判断的时候总是成立,在一开始以为是正反斜杠windows与linux不同导致的,后来发现时因为中文路径造成的. 在网上查阅了解决办法如下: imgpath = unicode(imgpath, "utf8") 利用上述语句将imgpath的编码进行转换,然后再进行判断以及后续的图片读取(使用cv2模块)就都没有问题了.

python中os模块中文帮助

python中os模块中文帮助 python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8,个人博客:http://butlandblog.appspot.com/ 注此模块中关于unix中的函数大部分都被略过,翻译主要针对WINDOWS,翻译速度很快,其中很多不足之处请多多包涵. 这个模块提供了一个轻便的方法使用要依赖操作系统的功能. 如何你只是想读或写文件,请使用open() ,如果你想

文件操作,路径操作,StringIO和BytesIO,序列化反序列化,正则表达式与python中使用

文件操作 打开操作open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True,opener=None)打开一个文件,返回一个文件对象(流对象)和文件描述符.打开文件失败,则返回异常基本使用: 创建一个文件test,然后打开它,用完关闭文件操作中,最常用的操作就是读和写. 文件访问的模式有两种:文本模式和二进制模式.不同模式下,操作函数不尽相同,表现的结果也不一样.open的参数