2008-11-04 2 views
0

UDP를 통해 C 기반 프로세스에서 데이터를받는 디버그 응용 프로그램을 작성했습니다. 나에게 보낸 문자열 중 하나가 ° 문자 - Unicode U+00B0 (우발적으로 StackOverflow 검색 기능을 중단 함)을 포함합니다. 내 wxPython 응용 프로그램에서 해당 문자열을 텍스트 상자에 추가하려고하면 UnicodeDecodeError이 표시됩니다.wxPython 앱에서도 기호를 안전하게 해독하는 방법은 무엇입니까?

내 첫 번째 시도에서 오류가 발생했습니다 (앱이 개의 잘못된 메시지를 전송했기 때문에 문제가 발생 함). 앱에서 문자를 사용하여 기기 주변의 다양한 온도를보고하는 것이므로 실제로는 소스 앱을 변경하면 제어 할 수 없으므로 심볼을 검색하여 디코딩 할 수 있습니까?

답변

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

Windows 응용 프로그램 인 경우 인코딩 대신 "cp1252"인코딩을 사용하는 것이 좋습니다. 학위 표시 만받는다면 중요하지 않습니다 (둘 다 동일합니다). – tzot

1

wxPython 자체에 대해 mych를 말할 수는 없지만 그걸 추측하고 있습니다. '123\xB0'과 같은 문자열이 있고이를 기본 인코딩 (ASCII)으로 유니 코드로 변환하려고하면을 표시합니다.이 문자열을 표시하기 전에 텍스트를 유니 코드로 변환하려고합니다.3210. 당신은 아마 (내가 문자열로 메시지를 가져옵니다 기능 get_string()를 가정입니다 경우)

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

s = message.get_string() 

을 대체하여이 문제를 해결할 수 있습니다. 차이점은 Unicode 로의 변환을 직접하면 인코딩을 지정한다는 것입니다.

0

상황이이 질문을 받았다 때 다시 다른 있었지만 하셨을 수도에 실수를 한단다 사람에 대한 내 생각 :

문제는 wxPython이 TO 유니 코드로 변환하려고 시도 했으므로 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()