如何解析Python中的字符?

时间:2015-05-17 07:16:17

标签: python string decode encode

我试过这个问题

# -*- coding: utf-8 -*-
s = "Ñ ÑÑÑаÑ! Ð½ÐµÑ Ñил"
e = s.encode('ascii')
print e

但它给了我这个错误。

    Traceback (most recent call last):
  File "C:/Users/username/Desktop/unicode.py", line 3, in <module>
    e = s.encode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

如何让文字可读?我已经尝试了几个小时!不知道如何解决这个问题。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

这里有一大堆问题。

首先,您已将Unicode字符卡入str字面而不是unicode字面。这几乎总是一个坏主意。

其次,您已在encode上致电str。但encode用于将unicode转换为str * 为了做到这一点,Python必须首先decode str unicodeencode,以便可以在其上调用decode。如果你强制Python为sys.getdefaultencoding()而不告诉它使用哪个编解码器,它将使用s = u"Ñ ÑÑÑаÑ! Ð½ÐµÑ Ñил" ,这几乎不是你想要的。 (特别是,因为您的源代码编码不是UTF-8。)

只需添加一个字母即可解决前两个问题:

strict

但它仍无法发挥作用。为什么?因为您要求它将非ASCII字符编码为ASCII字符集。这是不可能的。所以它会调用错误处理程序。由于您没有指定错误处理程序,因此您将获得默认值strict。顾名思义,当?要求它做一些不可能的事情时,e = s.encode('ascii', 'replace') 会引发异常。

还有其他错误处理程序 - 请参阅str.encode文档以获取完整列表。我不确定您期望的输出是什么,但您可以获得反斜杠转义的文本,或者用e = s.encode('utf-8') 替换所有非ASCII字符的文本,或其他一些可能性。例如:

hex

当然如果你真的不想要ASCII,而是UTF-8,那么一切都很简单:告诉Python你想要UTF-8而不是ASCII:

gzip

*有一些特殊的编解码器,例如strstr,可将unicode转换为unicodestr转换为{{1} }},或unicodeascii,但- (void) didSelectItem:(ListItem *)item { AudioPlayerViewController *apvc = [[AudioPlayerViewController alloc] init]; apvc.songurl = item.urls; [self presentModalViewController:apvc animated:YES]; } 不是其中之一。