[英]Python 3 print utf-8 encoded string problem
我正在從網絡服務請求一個字符串。 當我從程序中打印它時:
variable = getFromNetwork()
print(variable)
我使用python3 net.py
執行它,我得到:
\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612
當我在 python3 CLI 中執行時:
>>> print("\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612")
تÙ
Ù
Ù612
當我在 python2 CLI 中執行時購買,我得到了正確的結果:
>>> print("\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612")
تملي612
如何通過 python3 在我的程序中打印它?
執行以下行后:
print(print(type(variable), repr(variable)))
得到
<class 'str'> '\\xd8\\xaa\\xd9\\x85\\xd9\\x84\\xd9\\x8a612'
我想我應該首先刪除\\x
使其成為十六進制,然后對其進行解碼。 你的解決方案是什么??
您需要指定編碼,以便解釋器知道如何解釋數據:
s = "\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612"
y = s.encode('raw_unicode_escape')
print (y) # is a bytes object now!
print (y.decode('utf-8'))
出去:
b'\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612'
تملي612
您的變量是一個(unicode)字符串,其中包含 UTF8 編碼字節字符串的代碼。 這可能是因為它被錯誤地解碼並使用錯誤的編碼(這里可能是 Latin1)。
您可以通過首先轉換為字節字符串而不更改代碼(因此使用 Latin1 編碼)來修復它,然后您將能夠正確解碼它:
variable = getFromNetwork().encode('Latin1').decode()
print(variable)
演示:
variable = "\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612"
print(variable.encode('Latin1').decode())
تملي612
使用repr
方法的 output 顯示該變量是轉義數據。 為了解決這個問題,變量應該先 unscaped 然后編碼為 utf-8:
unscaped_data = bytes(variable, "utf-8").decode("unicode_escape")
result = unscaped_data.encode('raw_unicode_escape').decode("utf-8")
在 python 3 中,我使用以下代碼進行了測試
line='\xd8\xaa\xd9\x85\xd9\x84\xd9\x8a612'
line = line.encode('raw_unicode_escape')
line=line.decode("utf-8")
print(line)
它打印
تملي612
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.