[英]Python encoding problem when reading but not when typing
我正在從文本文件中讀取一些字符串。 其中一些字符串有一些“奇怪”的字符,例如“\\ xc3 \\ xa9comiam”。 如果我復制該字符串並將其粘貼到變量中,我可以將其轉換為可讀字符:
string = "\xc3\xa9comiam"
print(string.encode("raw_unicode_escape").decode('utf-8'))
écomiam
但如果我從文件中讀取它,它不起作用:
with open(fn) as f:
for string in f.readlines():
print(string.encode("raw_unicode_escape").decode('utf-8'))
\xc3\xa9comiam
似乎解決方案必須非常簡單,但我找不到它。 我能做什么?
謝謝!
那些不是unicode-escape
那些 - 就像名字所暗示的那樣,處理Unicode序列,如\é
而不是\\xe9
。
你擁有的是UTF-8編碼序列。 解碼的方法是將其轉換為bytes
序列,然后可以將其解碼為Unicode字符串。
# Let's not shadow the string library
s = "\xc3\xa9comiam"
print(bytes(s, 'latin-1').decode('utf-8'))
'latin-1'
技巧是一個骯臟的秘密,它只是將每個字節轉換為具有相同字符代碼的字符。
對於您的文件,您可以在二進制模式下打開它,這樣您就不必將其明確地轉換為bytes
,或者您可以簡單地將相同的轉換應用於您閱讀的字符串。
謝謝大家的幫助,
我想,我已經找到了一個解決方案(不是很優雅,但確實如此)。
print(bytes(tm.strip(), "utf-8").decode("unicode_escape").encode("raw_unicode_escape").decode('utf-8'))
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.