2011年05月20日 星期五 14:03
代码如下:
# _*_ coding: utf-8 _*_
import os
for root, dirs, files in os.walk("G:\\IE_Download"):
print root,dirs,files
输出部分节选如下:
G:\IE_Download\这里人气高只能发这儿来了,一个困扰很久的网络问题 - Windows7 32bit
讨论专区 远景论坛.files\style2098.files [] ['468x60.gif']
#以上是保存的在线网页,文件夹中的名字可以正常显示为中文
G:\IE_Download ['Atheros_AR813X_drv1.0.0.49WHQL', 'FilemonNt7.04', 'L2WinSetup_v2.6.7.17_WHQL', 'SHIYAN\xca\xb5\xd1\xe9SHIYAN', 'VC6_0\xd6\xd0\xd3\xd1\xd4\xaa\xba\xaf\xca\xfd\xce\xde\xb7\xa8\xb7\xc3\xce\xca\xc0\xe0\xcb\xbd\xd3\xd0\xb3\xc9\xd4\xb1\xb5\xc4\xbd\xe2\xbe\xf6\xb0\xec\xb7\xa8
#以上文件中的中文字符却不能够正确显示
我尝试过换一种字符编码,但是都是效果相同的,而且在网页中显示这个脚本,直接连文件夹中的中文名字也无法显示了。
请问各位,这是为什么?该如何解决?
2011年05月20日 星期五 14:06
我看的书就是哲思社区写的《可爱的Python》
2011年05月20日 星期五 16:13
# -*- coding: utf-8 -*-
是横线,好像你的是下划线...
汉字输出,有时候比较麻烦,要gb2312和utf-8来回转,你可以多看看这方面的例子
2011年05月20日 星期五 16:42
你可以去看下python2.x的源码,
当你print字符串的时候,调用的是stirngobject.c中的 string_print函数,并且其中的flag被设置成Py_PRINT_RAW,这样将直接调用fwrite函数输出,这就有点像你在vc中用printf("中文");可以正确在控制台输出一样。
而当你print一个列表的时候,调用的是listobject.c中的list_print函数,这个函数取出list中的所有元素,并调用object.c中的PyObject_Print来打印他们,但list_print函数传递给PyObject_Print的flags为NULL, 而PyObject_Print在打印字符串的时候依然会调用字符串的 string_print函数,并将空的flags传给string_print,而这时,string_print的flags不再是Py_PRINT_RAW,所以不在向打印字符串本身那样,直接输出,
而是对其中的每个字符都进行适当转义上述看到的\x之类的,就是通过else if (c < ' ' || c >= 0x7f)
fprintf(fp, "\\x%02x", c & 0xff);这类的语句转义的。
这个功能类似python repr一个字符串
所以当你想print,list来直接输出中文是很困难的,即使你保证了网页的编码和python输出的文件编码一样,因为转义过的形似\xd0\xd3只有python知道是什么。
你可以把list里的每个字符串提取出来,再直接print
for root, dirs, files in os.walk("G:\\IE_Download"):
for pd in dirs:
print pd
for pf in files:
print files
.....
python3的列表输出就没这问题。。
2011年05月20日 星期五 17:03
回二楼:
短横线和下划线都一样。。没区别。。
而且为什么文件夹的中文可以正确显示呢?
我已经再次试验,短横线和下划线按照三楼的方法都可以正确输出。而且我把-*-去掉都可以,似乎只要注释里面有coding关键词就可以
2011年05月20日 星期五 17:12
回三楼:
你说的一大串我没看懂。。也许是我现在懂得还不多,顺便问一句,python是用C开发的?你的留言我珍藏了,我按照你的方法,for zk in dirs: print zk
可以正常输出中文文件名了。
谢谢各位的热心关注和指点:)以下是混输结果:
ha_regmon20e.exe
L2WinSetup_v2.6.7.17_WHQL.rar
new_holytelecom2.07.2各校通用版.rar
ppstreamsetup.exe
qm8chs.exe
sniffer.zip
sogou_pinyin_52.exe
Thunder7.1.6.2194.exe
VC6_0中友元函数无法访问类私有成员的解决办法-------VC6_0的bug - - C++博客.htm
2011年05月20日 星期五 17:29
嗯,python是用C开发的
2011年05月20日 星期五 21:06
加一句判断类型的就行了
if isinstance(a, unicode):
print a.encode('gb2312')
else:
print a.decode('utf-8').encode('gb2312')
Zeuux © 2024
京ICP备05028076号