wxPythonアプリで度数記号を安全にデコードするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/262249

質問

UDPを介してCベースのプロセスからデータを受信するデバッグアプリを作成しています。私に送られた文字列の1つに° 文字が含まれています- Unicode U + 00B0 (偶然StackOverflow検索機能を破壊します!)。 wxPythonアプリケーションがその文字列をテキストボックスに追加しようとすると、 UnicodeDecodeError が発生します。

この問題を修正する最初の試みは、単にそのエラーをキャッチしました(アプリは明らかに some 悪いメッセージを送信するためです。問題は、アプリがキャラクターを使用してユニット周辺のさまざまな温度を報告し、ソースアプリを変更するのは制御できないため、これらのシンボルを検出して wxTextCtrl が表示できるものにデコードするにはどうすればよいですか?

役に立ちましたか?

解決

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()

他のヒント

wxPython自体についてはmychとは言えませんが、 '123 \ xB0' のような文字列があり、デフォルトのエンコード(ASCII)でUnicodeに変換しようとすると、 UnicodeDecodeError がスローされます。おそらく、これを置き換えることで修正できます

s = message.get_string()

with

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

(メッセージを文字列として取得する関数 get_string()を想定しています)。ここでの違いは、ユニコードへの変換を手動で行うことで、エンコードを指定できることです。

これが尋ねられたとき、物事は異なっていたかもしれませんが、これにつまずく人のための私の考え:

問題は、wxPythonがTO 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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top