我试过这个问题
# -*- 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)
如何让文字可读?我已经尝试了几个小时!不知道如何解决这个问题。任何帮助将不胜感激!
答案 0 :(得分:1)
这里有一大堆问题。
首先,您已将Unicode字符卡入str
字面而不是unicode
字面。这几乎总是一个坏主意。
其次,您已在encode
上致电str
。但encode
用于将unicode
转换为str
。 * 为了做到这一点,Python必须首先decode
str
unicode
到encode
,以便可以在其上调用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
*有一些特殊的编解码器,例如str
和str
,可将unicode
转换为unicode
,str
转换为{{1} }},或unicode
到ascii
,但- (void) didSelectItem:(ListItem *)item {
AudioPlayerViewController *apvc = [[AudioPlayerViewController alloc] init];
apvc.songurl = item.urls;
[self presentModalViewController:apvc animated:YES];
}
不是其中之一。