在Python字符串中处理ASCII字符
我有一个文件,名字叫 "SSE-Künden, SSE-Händler.pdf"
,里面有两个特殊字符(ü和ä)。当我在Python解释器中打印这个文件名时,这些特殊字符被转换成了对应的ASCII值,比如变成了 'SSE-K\x81nden, SSE-H\x84ndler.pdf'
。但我想要的是:
测试目录里有一个名为 'SSE-Künden, SSE-Händler.pdf' 的PDF文件。
我尝试了这个代码: path = 'C:\test' for a,b,c in os.walk(path): print c
['SSE-K\x81nden, SSE-H\x84ndler.pdf']
我该如何把这些ASCII字符转换回它们原来的Unicode值,并在解释器中显示原始文件名("SSE-Künden, SSE-Händler.pdf"
),同时也想把它写入某个文件中,保持不变。我使用的是Python 2.6和Windows操作系统。
谢谢。
3 个回答
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它没有按照预期工作,或者出现了错误信息。这时候,我们就需要去查找相关的资料,看看有没有人遇到过类似的问题,或者有没有解决方案。
通常,大家会在一些技术论坛或者问答网站上寻求帮助,比如StackOverflow。在这些地方,程序员们会分享他们的经验,提出问题,或者给出解决方案。通过这些交流,我们可以学习到很多实用的知识,帮助我们更好地理解编程中的各种情况。
总之,遇到问题时,不要害怕去寻求帮助,很多人都曾经经历过类似的困扰,大家一起讨论就能找到解决办法。
for a,b,c in os.walk(path):
for n in c:
print n.decode('utf-8')
假设你的终端可以显示这些字符,可以遍历文件列表并逐个打印出来(或者使用Python 3,它会在列表中显示Unicode字符):
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for p,d,f in os.walk(u'.'):
... for n in f:
... print n
...
SSE-Künden, SSE-Händler.pdf
另外,我使用了一个Unicode字符串(u'.')作为路径。这告诉os.walk
返回Unicode字符串,而不是字节字符串。当处理非ASCII的文件名时,这样做是个好主意。
在Python 3中,字符串默认就是Unicode,非ASCII字符会直接显示给用户,而不是以转义码的形式显示:
Python 3.2.1 (default, Jul 10 2011, 21:51:15) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for p,d,f in os.walk('.'):
... print(f)
...
['SSE-Künden, SSE-Händler.pdf']