Python的程序,读取含有中文目录下的文件,结果发现根本读取不了该中文目录下的文件,

原因:通过调试发现:该文件的目录乱码,目录无法解析,自然导致无法读取文件内容

解决方法:

strPath = "E:\superBoard\pro_input\1.8有理数的减法\1.8有理数的减法.htm" #这里的strpath是你的中文路径名

strPath = unicode(strPath , "GB2312")

此时得到的中文路径就不会乱码了

延伸知识:

unicode编码系统的发明是为了统一各国的文字,因此也叫“万国码”。Unicode 为每种语言设置了唯一的二进制编码表示方式,也就是说无论哪个国家的语言都可以在 Unicode 上找到对应的代码。因此,当不同的编码系统进行相互转换的时候,可以利用 Unicode 做一个“中介”。

其他编码系统到 Unicode 的转换过程我们称为解码(decode),将 Unicode 转换为其他编码系统的过程称之为编码(encode)。例如 A 编码需要转换为 B 编码,过程如下:

A编码 -> decode(A) -> Unicode -> encode(B) -> B 编码

使用下面的方法得到你当前的默认编码

>>> import sys
>>> sys.getdefaultencoding()      #一般显示的都是这个‘ascii’

下面有问题:

如何处理普通字符串和 Unicode 字符串进行拼接抛出 UnicodeDecodeError 异常?

  1. >>> string = "我爱" + u"Fish"
  2. Traceback (most recent call last):  File "<stdin>", line 1, in <module>UnicodeDecodeError:'ascii'codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

分析:

使用 + 号进行字符串拼接,左边是普通字符串,右边是 Unicode 字符串。当两种类型的字符串拼接的时候,Python 会自动将左边的中文字符串转换为 Unicode 字符串,再进行拼接操作。但由于 "我爱" 的 ASCII 编码为 '\xe6\x88\x91\xe7\x88\xb1',其中十六进制 '\xe6' 对应的值是 230。当编码值在 0 ~ 127 的时候,Unicode 和 ASCII 是兼容的,转换不会有什么问题。但当值大于 128 的时候,ASCII 编码便不能直接转换为 Unicode 了。因此,抛出 UnicodeDecodeError。

解决方案:

第一种:使用 Python3
第二种: 指定转换为 Unicode 的解码方式:

  1. >>> string = "我爱".decode('utf-8') + u"Fish"
  2. >>> print string
  3. 我爱Fish

第三种: 将 Unicode 字符串部分进行编码:

  1. >>> string = "我爱" + u"Fish".encode("utf-8")
  2. >>> print string
  3. 我爱Fish
再举个栗子:
 
问题:文件编码与 Python 编码不同如何解决?

test.txt 内容如下,并保存为 GB2312 编码:

  1. 我爱,真的!

test.py 内容如下:

  1. f1 = open("test.txt")
  2. print(f1.read())
  3. f1.close

但运行test.pl时会报错:

  1. >>>
  2. Traceback (most recent call last):
  3. File "/Users/FishC/Documents/Python/test.py", line 4, in <module>
  4. print(f1.read())
  5. File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/encodings/ascii.py", line 26, in decode
  6. return codecs.ascii_decode(input, self.errors)[0]
  7. UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)

分析:

如果前边的内容都可以理解了,那么解决这样的编码问题就不再难得住你啦~~~

使用 open 打开文件的编码格式取决于系统(可以通过 locale.getpreferredencoding() 获得),认真看报错信息,这里系统使用 ASCII 对文件内容进行解码,遇到错误......因为我们知道文件的存放格式是 GB2312,因此我们只需要在打开文件的时候设置 encoding="gb2312" 即可解决问题:

  1. f1 = open("test.txt", encoding="gb2312")
  2. print(f1.read())
  3. f1.close

Python入门--番外--中文目录乱码问题的更多相关文章

  1. VT 入门番外篇——初识 VT

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  2. 羽夏看Win系统内核—— VT 入门番外篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  3. git windows中文目录乱码问题解决

    转自:http://blog.chinaunix.net/uid-9789774-id-3080448.html Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情 ...

  4. 转:git windows中文目录乱码问题解决

    Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情况的中文乱码: 1.ls不能显示中文目录 解决办法:在git/git-completion.bash中增加一行:  ...

  5. 在Vs code中使用sftp插件以及连接windows远程sftp协议部署指导(解决vscode的sftp插件中文目录乱码问题)

    一.启动SFtp 二.上手vs code SFTP插件 2.1 初始配置 2.2解决乱码问题 三.SFTP配置 3.1常用配置 3.2示例配置 四.SFTP使用 五.扩展阅读 一.启动SFtp 话说小 ...

  6. Python HTTP库requests中文页面乱码解决方案!

    http://www.cnblogs.com/bitpeng/p/4748872.html Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的 ...

  7. Python入门之软件开发目录规范

    本章重点: 理解在开发人标准软件时,如何布局项目目录结构,以及注意开发规范的重要性. 一.为什么要有好的目录结构 二.目录组织的方式 三.关于README的内容 四.关于requirements.tx ...

  8. Python入门之PyCharm中目录directory与包package的区别

    对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清 ...

  9. python学习番外篇——字符串的数据类型转换及内置方法

    目录 字符串的数据类型转换及内置方法 类型转换 内置方法 优先掌握的方法 需要掌握的方法 strip, lstrip, rstrip lower, upper, islower, isupper 插入 ...

随机推荐

  1. ios push Payload

    https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotifi ...

  2. Spring启动流程—源码解读

    https://blog.csdn.net/yangliuhbhd/article/details/80790761 Spring的AbstractApplicationContext的refresh ...

  3. 洛谷 P2668 斗地主

    毒瘤题目,搞了三天-- 也没什么好讲的,就是纯搜索,先搜顺子,再搜其他的,最后单张牌和对子的时候,就不要搜索了,直接枚举,不然会T飞掉多么痛的领悟-- 主要还是靠码力 #include<iost ...

  4. MySQL插入SQL语句后在phpmyadmin中注释显示乱码

    自己写一个建一个简单的数据表,中间加了个注释,但是用PHPmyadmin打开后发现注释不对. 就先查询了一下sql 语句 发现SQL 语句并没有问题,感觉像是显示编码的问题,就先用set names ...

  5. vue axios 请求本地接口端口不一致出现跨域设置代理

    首先在config下面的index.js,设置跨域代理 在axios请求的时候     用'/api/' 替代baseURL 最重要的就是设置完必须重新 npm run dev 否则不生效

  6. HDU-2018-奶牛的故事

    这题找到递推式就好写了,递推式大致是: f=n (n<=4) f=f(n-1)+f(n-3) (n>4) 其实这题的题意,我觉得是有很大的问题的,它前后说的每年年初的意思都不一样,敬请参考 ...

  7. linux中复制文件夹的所有文件到指定目录

    这里我们的需求是需要将一个文件夹中的所有文件都复制到另一个文件夹中,而不是将一个文件夹复制到另外一个文件夹中. //这里需要使用到-R参数,表示递归处理,将指定目录下的所有文件与子目录一并处理//一开 ...

  8. 条款52:写了placement new 也要写placement delete(write placement delete if you write placement new)

    NOTE: 1.当你写一个placement operator new .请确定也要写出了对应的placement operator delete.如果没有这样做,你的程序可能发生隐晦而时断时续的内存 ...

  9. Python 列表相关

    python列表 列表推导式 例1 [ i*i for i in range(10) ] 打印如下: >>> [i*i for i in range(10)] [0, 1, 4, 9 ...

  10. python 列表(增删改查)

    列表 :(列表可以嵌套,列表的中的元素可以为任意) 列表的创建:1.   a = [1, 2, 3] 2.   a = list([1, 2, 3]) 1.查: 索引(下标),都是从0开始 切片 .c ...