在Python字符串中处理ASCII字符

0 投票
3 回答
1613 浏览
提问于 2025-04-17 02:49

我有一个文件,名字叫 "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 个回答

0

关于如何写入文件,可以参考这个链接:http://docs.python.org/howto/unicode.html#reading-and-writing-unicode-data

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它没有按照预期工作,或者出现了错误信息。这时候,我们就需要去查找相关的资料,看看有没有人遇到过类似的问题,或者有没有解决方案。

通常,大家会在一些技术论坛或者问答网站上寻求帮助,比如StackOverflow。在这些地方,程序员们会分享他们的经验,提出问题,或者给出解决方案。通过这些交流,我们可以学习到很多实用的知识,帮助我们更好地理解编程中的各种情况。

总之,遇到问题时,不要害怕去寻求帮助,很多人都曾经经历过类似的困扰,大家一起讨论就能找到解决办法。

for a,b,c in os.walk(path):
    for n in c:
        print n.decode('utf-8')
3

假设你的终端可以显示这些字符,可以遍历文件列表并逐个打印出来(或者使用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']

撰写回答