【问题标题】:Handling ascii char in python string处理python字符串中的ascii char
【发布时间】:2011-09-22 06:16:51
【问题描述】:

我有一个名为"SSE-Künden, SSE-Händler.pdf" 的文件,其中有这两个unicode char ( ü,ä) 当我在python 解释器上打印这个文件名时,unicode 值被转换成各自的ascii 值我猜'SSE-K\x81nden, SSE-H\x84ndler.pdf' 但我想

测试目录包含名为“SSE-Künden, SSE-Händler.pdf”的 pdf 文件

我试过这个: 路径 = 'C:\test' 对于 os.walk(path) 中的 a、b、c: 打印 c

['SSE-K\x81nden, SSE-H\x84ndler.pdf']

我如何将此 ascii 字符转换为其各自的 unicode val,我想在解释器上显示原始名称("SSE-Künden, SSE-Händler.pdf")并按原样写入某个文件。我如何实现这一点。我正在使用 Python 2.6 和 windows 操作系统。

谢谢。

【问题讨论】:

  • 您的终端会话的字符编码是否设置为 UTF-8?
  • 抱歉,如何验证。
  • 如果您使用的是 Ubuntu,终端(从菜单中)--> 设置字符编码

标签: python ascii decode asciiencoding


【解决方案1】:

假设您的终端支持显示字符,遍历文件列表并单独打印它们(或使用 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']

【讨论】:

  • 对不起,在我使用python 2.6和windows os,ipython之前我没有提到
  • 他的问题是如何以原生形式(非字节格式)显示 unicode 字符
  • +1 使用 unicode 路径确实有效,有趣且不明显。
  • 不,我在 python 2.6.7 上尝试过,我收到以下错误:UnicodeEncodeError: 'charmap' codec can't encode character u'\x81' in position 22: character maps to 跨度>
  • @Shashi,很有趣。您的文件名是 Unicode 字符串,但包含 ü 的 cp437(美国 Windows 控制台编码)字符值。这个文件最初是在 Windows 上创建的吗?我为上面的示例创建了文件,ü 和 ä 的 Unicode 字符是 \xfc\xe4
【解决方案2】:
for a,b,c in os.walk(path):
    for n in c:
        print n.decode('utf-8')

【讨论】:

  • +1:如果他的终端会话设置为显示 unicode,这应该可以工作。
  • 要将 windows 终端设置为 unicode,请参阅stackoverflow.com/questions/5419/…
  • 如果文件系统不使用UTF-8,比如Windows,这个就不行了。
【解决方案3】:
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多