我正在从数据库中读取一些数据,其中包括各种语言的数据,其中一种是俄语。当我试图读取文本时,字符串如下所示:
('\xd0\xb2\xd0\xbe\xd1\x82 \xd0\xb2\xd1\x8b \xd0\xb5\xd0\xb3\xd0\xbe \xd1\x81\xd0\xb5\xd0\xb9\xd1\x87\xd0\xb0\xd1\x81 \xd0\xb8 \xd0\xbe\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb4\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd1\x82\xd0\xb5! \xd0\xa0\xd0\xb0\xd1\x88\xd0\xb8\xd1\x81\xd1\x82\xd1\x8b \xd0\xb5\xd1\x89\xd1\x91 \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f \xd0\xbf\xd1\x80\xd0\xbe\xd1\x8f\xd0\xb2\xd1\x8f\xd1\x82. \xd1\x8d\xd1\x82\xd0\xbe \xd0\xb5\xd1\x89\xd1\x91 \xd0\xb4\xd0\xb0\xd0\xb6\xd0\xb5 \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb0\xd0\xbb\xd0\xbe!',)因此,如果我现在将我的代码写成:
import pprint
class MyPrettyPrinter(pprint.PrettyPrinter):
def format(self, object, context, maxlevels, level):
if isinstance(object, unicode):
return (object.encode('utf8'), True, False)
return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)
a = ('\xd0\xb2\xd0\xbe\xd1\x82 \xd0\xb2\xd1\x8b \xd0\xb5\xd0\xb3\xd0\xbe \xd1\x81\xd0\xb5\xd0\xb9\xd1\x87\xd0\xb0\xd1\x81 \xd0\xb8 \xd0\xbe\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb4\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd1\x82\xd0\xb5! \xd0\xa0\xd0\xb0\xd1\x88\xd0\xb8\xd1\x81\xd1\x82\xd1\x8b \xd0\xb5\xd1\x89\xd1\x91 \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f \xd0\xbf\xd1\x80\xd0\xbe\xd1\x8f\xd0\xb2\xd1\x8f\xd1\x82. \xd1\x8d\xd1\x82\xd0\xbe \xd0\xb5\xd1\x89\xd1\x91 \xd0\xb4\xd0\xb0\xd0\xb6\xd0\xb5 \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb0\xd0\xbb\xd0\xbe!',)
MyPrettyPrinter().pprint(a)产出如下:
('\xd0\xb2\xd0\xbe\xd1\x82 \xd0\xb2\xd1\x8b \xd0\xb5\xd0\xb3\xd0\xbe \xd1\x81\xd0\xb5\xd0\xb9\xd1\x87\xd0\xb0\xd1\x81 \xd0\xb8 \xd0\xbe\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb4\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd1\x82\xd0\xb5! \xd0\xa0\xd0\xb0\xd1\x88\xd0\xb8\xd1\x81\xd1\x82\xd1\x8b \xd0\xb5\xd1\x89\xd1\x91 \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f \xd0\xbf\xd1\x80\xd0\xbe\xd1\x8f\xd0\xb2\xd1\x8f\xd1\x82. \xd1\x8d\xd1\x82\xd0\xbe \xd0\xb5\xd1\x89\xd1\x91 \xd0\xb4\xd0\xb0\xd0\xb6\xd0\xb5 \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb0\xd0\xbb\xd0\xbe!',)我想把这个文本转换回ASCII。我已经尝试过PrettyPrinter方法解释了here,但是这个方法会打印字符串。我想捕捉这个ASCII/utf-8格式的“固定”字符串(真正的俄语文本,而不是包含斜杠的文本),并将其存储在一个列表中,而我不知道如何做到这一点。如果能提供任何帮助,我们将不胜感激。
编辑:

这是我的字符串,我试着把它转换成unicode,但是它没有任何影响。
发布于 2014-07-09 21:37:43
如果打印象元组这样的容器对象,则其中的每个元素都将转换为其repr()字符串形式,即十六进制转义用于字符串可显示的ASCII字符之外的字节值。它是这样做的,这样程序员就可以看到实际包含的值,而不需要终端根据某种编码来解释它。假设终端机不干扰ASCII。
print a[0]
# -> вот вы его сейчас и оправдываете! Рашисты ещё себя проявят. это ещё даже не начало!因此,如果您的终端使用UTF-8,那么只需从元组中提取值并打印出来。否则,在进一步处理字符串之前,您可能需要将UTF-8的字符串解码为unicode对象。
https://stackoverflow.com/questions/24647216
复制相似问题