1

我对 wx 和 python 有疑问,这似乎是一个 unicode 问题。

我正在使用便携式 python 2.7.2.1 和 wx-2.8-msw-unicode。

我的python代码在失败点是这个语句:

listbox.AppendText("\n  " + dparser.parse(t['created_at']).strftime('%H-%M-%S') + "    " +t['text'] + "\n")

t['文本']

有一个值:“RT @WebbieBmx:”@AlexColebornBmx:http ://t.co/cN6zSO69 “观看这个#retweet”

在我正在运行 python 的 DOS 窗口中打印时显示为:

'RT @WebbieBmx: \xe2\x80\x9c@AlexColebornBmx: http://t.co/cN6zSO69 \xe2 \x80\x9dwatch 这是一个#retweet'

回溯是:

回溯(最后一次调用):文件“myprogs\Search_db_dev.py”,第 713 行,在 onSubmit self.toField.GetLineText(0)) 文件“F:\Portable\Portable Python 2.7.2.1\App\myprogs\process_form2_dev. py”,第 575 行,在 display_Tweets 中

    listbox.AppendText("\n  " + dparser.parse(t['created_at']).strftime('%H-%M-%
S') + "    " +t['text'] + "\n")

文件“F:\Portable\Portable Python 2.7.2.1\App\lib\site-packages\wx-2.8-msw-uni code\wx_controls.py”,第 1850 行,在 AppendText

   return _controls_.TextCtrl_AppendText(*args, **kwargs)

文件“F:\Portable\Portable Python 2.7.2.1\App\lib\encodings\cp1252.py”,第 1 5 行,在

decode return codecs.charmap_decode(input,errors,decoding_table)

UnicodeDecodeError:“charmap”编解码器无法解码位置 73 中的字节 0x9d:字符映射到未定义

UnicodeDecodeError 似乎出现在右双引号 (\xe2\x80\x9d) 的末尾,但我不明白为什么。如果有任何帮助,我将不胜感激。

恐怕是一个简单的编码问题

4

2 回答 2

2

当我查看回溯时,对 cp1252 的引用让我感到震惊,因为文本是 utf8(正如在处理推文文本时可能预期的那样。)左侧的 utf8 序列 (\xe2\x80\x9c) 不是似乎引起了问题,但似乎在第二个十六进制序列中的 \xe2 之后有一个空格,这将阻止它从 utf8 正确解码。当我删除那个空间时,解码问题就消失了。所以你有一些糟糕的 utf8,我不确定当你从原始来源收到它时,除了在 try 语句中的显式解码之外,你会如何防范。这有意义吗?

于 2012-10-24T23:35:08.353 回答
0

是的,这是一个简单的编码问题。

您看不到原因的原因是您的字体无法区分u'”'u'"'。前者是一个卷曲的闭引号,它是'\xe2\x80\x9d'UTF-8 格式的。当您在执行“智能引号”的编辑器(如 MS Word)中编辑文本文件时,最常发生这种情况。

不过现在发现问题就好了;否则,在您将脚本提供给某个中国用户之前,一切似乎都可以正常工作……</p>

无论如何,这里的问题是你有一些存储 UTF-8 字符串的代码,还有一些其他代码试图访问它们,就好像它们是默认编码(你的 Windows OEM 字符集)一样。如果没有看到更多代码,很难确定你到底做错了什么,但希望这些信息足以让你找到它。

于 2012-10-24T23:15:32.630 回答