看《可爱的Python》遇到的中文编码问题
时间:2010-11-15
来源:互联网
《可爱的Python》有个光盘信息检索的例子,涉及到中文的问题,写了个小程序想先test下,结果出了一堆问题,比较繁琐,还希望各位抽出点时间帮忙看看。
具体情况如下。
===测试的文件目录结构===
G:\ZHANG\TEST
| test_中文.txt
| test_新建 WPS文字 文档.wps
|
\---dir_subtest_中文
file_subtest_新建 WPS文字 文档.wps
file_subtest_新建文本文档.txt
===_smartcode.py===
Python code
===chinese_test.py===
Python code
用到了一个 chardet 模块,chardet.feedparser.org
遇到的错误
1
test 中的 test_新建 WPS 文字 文档.wps
在 _smartcode 中编码为 utf8 输出后乱码,而作为字符串返回时正常
2
dir_subtest2中文 中的 file_subtest2_新建 WPS 文字 文档.wps
在 _smartcode 中编码为 utf8 输出后乱码,而作为字符串返回时也乱码(file_subtest2_新建文本文档 也是如此),这个错误与第一个错误不同,上一个错误作为字符串返回时正常
对于1和2,为什么同样的字符和同样的处理,结果却不同呢
3
在 test 目录中有两个文件:test_中文.txt 和 test_新建 WPS文字 文档.wps,对 test_中文.txt 处理的时候没有出现乱码,对wps文档处理时则出现了乱码(见第一个分割线上的内容),而对两者的处理都是由 GB2312 -> UTF8,为什么对字符做同样的处理,有的会出现乱码,有的不会呢?
这个编码的问题困惑了我很久,希望各位能抽出点宝贵的时间解答一下,谢谢!
具体情况如下。
===测试的文件目录结构===
G:\ZHANG\TEST
| test_中文.txt
| test_新建 WPS文字 文档.wps
|
\---dir_subtest_中文
file_subtest_新建 WPS文字 文档.wps
file_subtest_新建文本文档.txt
===_smartcode.py===
Python code
# -*- coding: utf-8 -*- import chardet def _smartcode(stream): """smart recove stream into UTF-8 """ ustring = stream codedetect = chardet.detect(ustring)["encoding"] print codedetect try: print ustring ustring = unicode(ustring, codedetect) print ustring print ustring.encode("utf8") return "%s" % (ustring.encode('utf8')) except: return u"bad unicode encode try!"
===chinese_test.py===
Python code
# -*- coding: utf-8 -*- import os, _smartcode def encode_to_utf8(root, dirs, files): export = "\n" + root + "\n" for d in dirs: export += '-d ' + root + _smartcode._smartcode(d) + "\n" for f in files: export += "-f %s %s \n" % (root, _smartcode._smartcode(f)) export += "="*70 return export def walker(): for root, dirs, files in os.walk('G:\\zhang\\test'): print encode_to_utf8(root, dirs, files) if __name__ == '__main__': result = walker() print result
用到了一个 chardet 模块,chardet.feedparser.org
遇到的错误
1
test 中的 test_新建 WPS 文字 文档.wps
在 _smartcode 中编码为 utf8 输出后乱码,而作为字符串返回时正常
2
dir_subtest2中文 中的 file_subtest2_新建 WPS 文字 文档.wps
在 _smartcode 中编码为 utf8 输出后乱码,而作为字符串返回时也乱码(file_subtest2_新建文本文档 也是如此),这个错误与第一个错误不同,上一个错误作为字符串返回时正常
对于1和2,为什么同样的字符和同样的处理,结果却不同呢
3
在 test 目录中有两个文件:test_中文.txt 和 test_新建 WPS文字 文档.wps,对 test_中文.txt 处理的时候没有出现乱码,对wps文档处理时则出现了乱码(见第一个分割线上的内容),而对两者的处理都是由 GB2312 -> UTF8,为什么对字符做同样的处理,有的会出现乱码,有的不会呢?
这个编码的问题困惑了我很久,希望各位能抽出点宝贵的时间解答一下,谢谢!
作者: xiandao7997 发布时间: 2010-11-15
命令行里不能直接向屏幕打印utf8编码的str,只能打印gbk(本地编码)str或者unicode。
作者: iambic 发布时间: 2010-11-15
忘了说,是在 IDLE 中调试的,不是命令行,IDLE 中是 UTF-8 的编码,命令行是 GBK,记得以前在 csdn 上看过
作者: xiandao7997 发布时间: 2010-11-15
那你就要自己检验下了,直接打印如下三条语句,看看哪几条能正确显示:
Python code
Python code
print u'\u5317\u4eac\u5929\u5b89\u95e8' print u'\u5317\u4eac\u5929\u5b89\u95e8'.encode('gbk') print u'\u5317\u4eac\u5929\u5b89\u95e8'.encode('utf8')
作者: iambic 发布时间: 2010-11-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28