Python入门--番外--中文目录乱码问题
写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 异常?
- >>> string = "我爱" + u"Fish"
- 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 的解码方式:
- >>> string = "我爱".decode('utf-8') + u"Fish"
- >>> print string
- 我爱Fish
第三种: 将 Unicode 字符串部分进行编码:
- >>> string = "我爱" + u"Fish".encode("utf-8")
- >>> print string
- 我爱Fish
test.txt 内容如下,并保存为 GB2312 编码:
- 我爱,真的!
test.py 内容如下:
- f1 = open("test.txt")
- print(f1.read())
- f1.close
但运行test.pl时会报错:
- >>>
- Traceback (most recent call last):
- File "/Users/FishC/Documents/Python/test.py", line 4, in <module>
- print(f1.read())
- File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/encodings/ascii.py", line 26, in decode
- return codecs.ascii_decode(input, self.errors)[0]
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)
分析:
如果前边的内容都可以理解了,那么解决这样的编码问题就不再难得住你啦~~~
使用 open 打开文件的编码格式取决于系统(可以通过 locale.getpreferredencoding() 获得),认真看报错信息,这里系统使用 ASCII 对文件内容进行解码,遇到错误......因为我们知道文件的存放格式是 GB2312,因此我们只需要在打开文件的时候设置 encoding="gb2312" 即可解决问题:
- f1 = open("test.txt", encoding="gb2312")
- print(f1.read())
- f1.close
Python入门--番外--中文目录乱码问题的更多相关文章
- VT 入门番外篇——初识 VT
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 羽夏看Win系统内核—— VT 入门番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- git windows中文目录乱码问题解决
转自:http://blog.chinaunix.net/uid-9789774-id-3080448.html Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情 ...
- 转:git windows中文目录乱码问题解决
Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情况的中文乱码: 1.ls不能显示中文目录 解决办法:在git/git-completion.bash中增加一行: ...
- 在Vs code中使用sftp插件以及连接windows远程sftp协议部署指导(解决vscode的sftp插件中文目录乱码问题)
一.启动SFtp 二.上手vs code SFTP插件 2.1 初始配置 2.2解决乱码问题 三.SFTP配置 3.1常用配置 3.2示例配置 四.SFTP使用 五.扩展阅读 一.启动SFtp 话说小 ...
- Python HTTP库requests中文页面乱码解决方案!
http://www.cnblogs.com/bitpeng/p/4748872.html Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的 ...
- Python入门之软件开发目录规范
本章重点: 理解在开发人标准软件时,如何布局项目目录结构,以及注意开发规范的重要性. 一.为什么要有好的目录结构 二.目录组织的方式 三.关于README的内容 四.关于requirements.tx ...
- Python入门之PyCharm中目录directory与包package的区别
对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清 ...
- python学习番外篇——字符串的数据类型转换及内置方法
目录 字符串的数据类型转换及内置方法 类型转换 内置方法 优先掌握的方法 需要掌握的方法 strip, lstrip, rstrip lower, upper, islower, isupper 插入 ...
随机推荐
- poj1338 Ugly Numbers 打表, 递推
题意:一个数的质因子能是2, 3, 5, 那么这个数是丑数. 思路: 打表或者递推. 打表: 若该数为丑数,那么一定能被2 或者3, 或者5 整除, 除完之后则为1. #include <ios ...
- 转 在Qt中用QAxObject来操作Excel
最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Programming with Qt 4>(Second Edition)发现可以在Qt中运用ActiveX控件, ...
- 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法
1. 2016新版raspbian系统的固定IP配置: 自2016年2月份新版raspbian系统发布以后,树莓派的固定IP配置方法就与之前不一样了. 之前在raspbian系统中编辑/etc/net ...
- Linux命令权限 用户权限 组权限 文件、目录权限
Linux命令的格式是: 命令+选项+参数 命令是必须存在的,选项和参数可以不必存在,不写的情况是有默认的参数 Linux 一切皆文件 对于文件而言,只需要对文件进行读写就可以实现对文件内容内容的增删 ...
- 使用gcc -g编译,gdb调试时仍然存在“no debug symbols found”的错误
今天为调试一段代码,使用gcc将程序用-g选项重新编译.但是使用gdb进行debug时,仍然出现“no debug symbols found”的错误.仔细检查了一下Makefile,原来后面定义的连 ...
- PAT (Advanced Level) Practise - 1096. Consecutive Factors (20)
http://www.patest.cn/contests/pat-a-practise/1096 Among all the factors of a positive integer N, the ...
- java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
没有解决问题之前客户端代码: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.a ...
- (8)zabbix监控项item是什么
什么是item Items是从主机里面获取的所有数据.通常情况下我叫itme为监控项,例如服务器加入了zabbix监控,我需要监控它的cpu负载,那么实现这个方法的东西就叫item item构成 it ...
- systemverilog之OOP
what is oop terminology an example class default methods for classes static attibute assigment and c ...
- Hive和Hbase整合
Hive只支持insert和delete操作,并不支持update操作,所以无法实施更新hive里的数据,而HBASE正好弥补了这一点,所以在某些场景下需要将hive和hbase整合起来一起使用. 整 ...