在Python中将Unicode字符转换为UTF-8
有人能告诉我怎么在Python中把unicode字符转换成utf-8吗?
举个例子:
输入 - अ अ घ ꗄ
输出 - E0A485 E0A485 E0A498 EA9784
我在Python控制台试过以下方法:
python-prompt>>> character = "अ"
python-prompt>>> character
python-prompt>>> '\xe0\xa4\x85'
在上面的例子中,如果我直接在控制台打印变量“character”,我会得到输出'\xe0\xa4\x85'。但是我需要的输出格式是E0A485。简单来说,我得到的输出'\xe0\xa4\x85'里有3个'\x'的转义字符。我该怎么去掉这些'\x'呢?这样我的输出就可以是e0a485或者E0A485。
2 个回答
-1
你可以使用带有反斜杠替换标志的编码方法,像这样:
>>> character.encode('ascii', 'backslashreplace')
b'\\u0905 \\u0905 \\u0918 \\ua5c4'
如果你想要大写字母的话,可以在后面加上 .upper()。
1
只需要在你的Unicode字符串上调用 encode()
,然后再用 hexlify()
处理一下。
s = u'\u0905 \u0905 \u0918 \ua5c4'
print s
अ अ घ ꗄ
s_utf8 = s.encode('utf8')
print s_utf8
अ अ घ ꗄ
>>> s_utf8
'\xe0\xa4\x85 \xe0\xa4\x85 \xe0\xa4\x98 \xea\x97\x84'
>>> from binascii import hexlify
>>> hexlify(s_utf8)
>>> 'e0a48520e0a48520e0a49820ea9784'
如果你想保留空格,可以这样做:
>>> ' '.join(hexlify(c) for c in s_utf8.split())
'e0a485 e0a485 e0a498 ea9784'
>>> b' '.join(hexlify(c) for c in s_utf8.split()) # Python 3
b'e0a485 e0a485 e0a498 ea9784'
或者一步到位:
>>> s
u'\u0905 \u0905 \u0918 \ua5c4'
>>> ' '.join(hexlify(c.encode('utf8')) for c in s.split())
'e0a485 e0a485 e0a498 ea9784'
>>> b' '.join(hexlify(c.encode('utf8')) for c in s.split()) # Python 3
b'e0a485 e0a485 e0a498 ea9784'
你可以在结果字符串上调用 upper()
,这样就能得到 'E0A485 E0A485 E0A498 EA9784'
: