문제

UDP를 통해 C 기반 프로세스에서 데이터를 수신하는 디버그 앱이 있습니다. 나에게 보낸 줄 중 하나에는 a가 포함되어 있습니다 ° 캐릭터 - 유니 코드 U+00B0 (우연히 stackoverflow 검색 함수를 깨뜨립니다!). 내 wxpython 응용 프로그램이 그 문자열을 텍스트 상자에 추가하려고 할 때 UnicodeDecodeError.

문제를 해결하려는 첫 번째 시도는 단순히 그 오류를 일으켰습니다 (앱이 분명히 보내기 때문에 약간 나쁜 메시지. 문제는 앱이 캐릭터를 사용하여 장치 주변의 다양한 온도를보고하며 이는 우리가 실제로 기록해야 할 것입니다. 소스 앱 변경이 제어되지 않으므로 해당 기호를 무엇으로 감지하고 디코딩 할 수 있습니까? 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)을 사용하여 유니 코드로 변환하려고합니다. UnicodeDecodeError. 교체하여 이것을 고칠 수 있습니다

s = message.get_string()

~와 함께

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

(내가 함수를 가정하는 곳 get_string() 그것은 메시지를 문자열로 가져옵니다). 여기서 차이점은 직접 유니 코드로 변환하면 인코딩을 지정하게된다는 것입니다.

이것이 물었을 때 상황이 다를 수 있지만, 이것에 우연히 발견하는 사람에 대한 나의 생각은 다음과 같습니다.

문제는 Wxpython이 유니 코드로 변환하려고 시도하고 있으며, 숯불 정보가 부족하여 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