簡體   English   中英

Python中的UTF-8編碼

[英]UTF-8 coding in Python

我有一個用'_'編碼的UTF-8字符,例如'_ea_b4_80'。 我正在嘗試使用replace方法將其轉換為UTF-8字符,但是我無法獲得正確的編碼。

這是一個代碼示例:

import sys
reload(sys)  
sys.setdefaultencoding('utf8')

r = '_ea_b4_80'
r2 = '\xea\xb4\x80'

r = r.replace('_', '\\x')
print r
print r.encode("utf-8")
print r2

在此示例中,r與r2不同; 這是一個輸出。

\xea\xb4\x80
\xea\xb4\x80
관  <-- correctly shown 

可能是什么問題?

\\x僅在字符串文字中有意義,您不能使用replace來添加它。

要獲得所需的結果,請轉換為字節,然后解碼:

import binascii

r = '_ea_b4_80'

rhexonly = r.replace('_', '')          # Returns 'eab480'
rbytes = binascii.unhexlify(rhexonly)  # Returns b'\xea\xb4\x80'
rtext = rbytes.decode('utf-8')         # Returns '관' (unicode if Py2, str Py3)
print(rtext)

這應該讓您

如果您使用的是現代Py3,則可以避免使用import(假設r實際上是strbytes.fromhex ,與binascii.hexlify不同,只接受str輸入,而不接受bytes輸入),使用bytes.fromhex類方法代替binascii.unhexlify

rbytes = bytes.fromhex(rhexonly)  # Returns b'\xea\xb4\x80'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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