簡體   English   中英

Python 3 打印 utf-8 編碼字符串問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM