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. 火狐浏览器返回不加载JS

    火狐浏览器 go(-1),返回后不加载JS,谷歌会加载. 总结: Firefox和Safari在back时不会触发load, ready事件! 解决方法: $(window).unload(funct ...

  2. Java中的线程--并发库中的集合

    线程中的知识点基本都已经学完了,看看Java5并发库中提供的集合... 一.可堵塞队列 队列包含固定长度的队列和不固定长度的队列 ArrayBlockQueue中只有put()方法和take()方法才 ...

  3. 不安装oracle客户端用sqlplus连接数据库

    在不安装oracle客户端情况下用sqlplus连接数据库: 1.去官网下载 http://www.oracle.com/technetwork/topics/winx64soft-089540.ht ...

  4. HDU-1217-Arbitrage(SPFA)

    这题和以往的求最短路的题目略微有点不一样,以往求的都是最小的,这题求的是大的,而且还是乘法. 我们求的时候初始化的时候就要进行相反的初始化了,把它们初始化为0,然后比较大的就更新. 因为这题的点少边多 ...

  5. 怎么用js写一个类似于百度输入框的搜索插件

    PS:这次做的这个小插件只是在前端实现,并没有经过数据库.需要用到的的框架:1.bootstrap.css的样式 2.Vue.js 最终效果如下: JS部分: $(window).click(func ...

  6. Linux三剑客之sed详解(2)

    一.sed 分组替换(),\1 实例:I am a oldboy teacher. 吧oldboy 提取出来 二.特殊符号&代表被替换的字符串 实例:批量替换文件名 把stu_102999_1 ...

  7. Python9-面对对象1-day22

    def Person(name,blood,aggr,sex): person = { 'name' : name, 'blood':blood, 'aggr': aggr, 'sex' : sex, ...

  8. LeetCode(103) Binary Tree Zigzag Level Order Traversal

    题目 Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left ...

  9. 俯瞰spring

    [简化Java开发] 基于POJO的轻量级和最小入侵性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明式编程: 通过切面和模板减少样板代码: [容纳你的bean] 容器是spring ...

  10. MIP启发式算法:爬山算法 (Hill climbing)

    本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing). 目录 前言 Hill climbing 的过程 ...