0

UDP 経由で C ベースのプロセスからデータを受信する、私が書いているデバッグ アプリがあります。私に送られた文字列の 1 つに、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 自体については明言できませんが、表示する前にテキストを Unicode に変換しようとしていると推測しています'123\xB0'。投げ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 に答える