2017-01-26 55 views
0

我正在嘗試以八進制UTF-8字節爲用戶輸入並將它們轉換爲正常的UTF-8字符。輸入正從Tkinter的一個輸入字段(字段)服用,這是我正在處理它:以八進制UTF-8字節作爲用戶輸入Python 3.5

input = ((self.field.get(1.0,END)).split('\n\'))) 
print (bytes(input[0], 'utf-8').decode('unicode_escape')) 

用於例如字符\ 350 \ 260 \ 242此打印「è°¢」時,它應打印 謝。

b'\350\260\252'.decode('utf-8') 

返回正確的字符,但這是沒用的,因爲我試圖採取用戶輸入。有什麼方法可以直接以字節形式接收用戶的輸入,還是有更好的方法來進行解碼?任何幫助表示讚賞

+0

http://stackoverflow.com/questions/14820429/how-do-i-decodestring-escape-in​​-python3 –

回答

0

是的,unicode_escape有點奇怪,因爲在從字符串的轉義序列轉換爲unicode字符串(這是有道理的,因爲這就是它的原因)。你可以 「通過的Latin-1變爲亂碼往返」 使用的伎倆:

>>> br'\350\260\252'.decode('unicode_escape') 
'è°ª' 
>>> _.encode('l1').decode('u8') 
'謫' 

(其中一期工程,因爲拉丁語-1是第一個256個點的1對1的映射。)還有還有的undocumented codecs.escape_decode:

>>> codecs.escape_decode(br'\350\260\252')[0].decode() 
'謫' 

當然,這兩種編解碼器對特別Python語法本質上都是量身定製的,所以你必須推出自己剛剛處理八進制轉義。

相關問題