0

我有一个我一直在编写的调试应用程序,它通过 UDP 从基于 C 的进程接收数据。发送给我的其中一个字符串包含一个°字符 - Unicode U+00B0(它顺便破坏了 StackOverflow 搜索功能!)。当我的 wxPython 应用程序尝试将该字符串附加到文本框时,我得到一个UnicodeDecodeError.

我第一次尝试解决这个问题只是发现了这个错误(因为该应用程序显然确实发送了一些错误消息。问题是该应用程序还使用该字符来报告设备周围的各种温度,这是我们真正需要记录的内容。更改源应用程序超出了我的控制范围,那么如何检测这些符号并将其解码为wxTextCtrl可以显示的内容?

4

3 回答 3

2

pdc 做对了,以下工作正常(但没有decode):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx

app = wx.PySimpleApp()
app.TopWindow = wx.Frame(None)
field = wx.TextCtrl(app.TopWindow)
field.Value += '°'.decode('ISO8859-1')
app.TopWindow.Show()
app.MainLoop()
于 2008-11-04T20:34:13.553 回答
1

我不能对 wxPython 本身说 mych,但我猜它正在尝试在显示之前将文本转换为 Unicode,如果您有类似的字符串'123\xB0'并尝试使用默认编码(ASCII)将其转换为 Unicode,那么它会扔UnicodeDecodeError。您可以通过替换来解决此问题

s = message.get_string()

s = message.get_string().decode('ISO8859-1')

(我假设一个函数get_string()将消息作为字符串获取)。这里的不同之处在于,通过自己转换为 Unicode,您可以指定编码。

于 2008-11-04T16:48:22.887 回答
0

当被问到这个问题时,情况可能有所不同,但我对任何偶然发现这个问题的人的想法:

问题是 wxPython 正在尝试转换为 unicode,并且缺少字符集信息,它尝试使用无效的 ASCII。如果您知道您的数据是 utf-8,请告诉它,它会正常工作。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx

app = wx.PySimpleApp()
app.TopWindow = wx.Frame(None)
field = wx.TextCtrl(app.TopWindow)

string_data = '°'
print type(string_data)
# this would error, as it tries to convert to unicode from ascii
# field.Value += string_data

unicode_data = unicode(string_data, 'utf-8')
print type(unicode_data)
field.Value += unicode_data
app.TopWindow.Show()
app.MainLoop()
于 2012-11-21T15:42:08.233 回答