2017-06-01 148 views
3

我知道這可能是一個重複的問題,但我無法找到解決方案。Python 3解碼字符串

總之我有一個字符串,我想解碼:

raw = "\x94my quote\x94" 
string = decode(raw) 

從字符串預期

'"my quote"' 

值得注意的最後一點是,我與Python 3個工作這麼raw是unicode,因此已被解碼。鑑於此,我需要做什麼來「解碼」"\x94"字符?

+0

如果你已經有了一個Unicode字符串,你的網站刮使用了錯誤的編碼數據解碼爲Unicode。理想情況下,修正閱讀網站的代碼而不是結果;否則,使用錯誤應用的編碼進行編碼以解決問題,然後使用正確的解碼進行解碼。 –

+0

我剛剛使用'urllib.request.urlopen',並且似乎沒有選項可以改變請求的解碼方式。正如我選擇的答案中指出的那樣,解決我眼前的問題的方法是編碼爲「latin-1」,然後在「windows-1252」中解碼。這是一種合理的方法,還是有辦法從根本上解決問題? – rmorshea

+0

這是一個合理的方法,但沒有看到你的代碼閱讀網站的可重複的例子,這是很難解決這個問題的根:) –

回答

3
string = "\x22my quote\x22" 
print(string) 

你並不需要解碼,Python 3這是否適合你,但你需要對雙引號"

正確的控制字符然而,如果你有不同的字符集,它看來你有Windows 1252,那麼你需要從該字符集的字節字符串解碼:如果您的字符串不是一個字節的字符串喲

str(b"\x94my quote\x94", "windows-1252") 

u必須先對其進行編碼,我找到了Latin-1編碼的工作:

string = "\x94my quote\x94" 
str(string.encode("latin-1"), "windows-1252") 
+0

嗯,「'\ x94」'不是我選擇的輸入,而是來自我解析的網站,而'print'可能會將解碼字符串發送到stdout,我需要將它捕獲爲變量。 – rmorshea

+0

它被捕獲爲一個變量。如果我只是在Python中寫入str,它會輸出''「myquote」''。 – CodeMonkey

+0

@rmorshea我修改了我的答案,包括解碼來自不同字符集的字符串 – CodeMonkey

1

你試過這樣嗎?我認爲您需要撥打decode作爲byte課程的一種方法,並通過utf-8作爲參數。在字符串前添加b

string = b"\x94my quote\x94" 
decoded_str = string.decode('utf-8', 'ignore') 
print(decoded_str) 
+1

這是一個'AttributeError' ... –

+1

如果你_think_,你應該驗證你的解決方案 – CIsForCookies

+0

我的錯,糾正了它。你說得對,所以上癮,但是當我的反應開始變得不穩定時,該上牀了。 (: –

2

,如果你的意思是這個我不知道,但這個工程:

some_binary = a = b"\x94my quote\x94" 
result = some_binary.decode() 

而且你得到了結果...... 如果你不知道選擇哪個編碼,您可以使用chardet.detect

import chardet 
chardet.detect(some_binary)