在Python中将Unicode字符转换为UTF-8

1 投票
2 回答
4603 浏览
提问于 2025-04-18 18:40

有人能告诉我怎么在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'

撰写回答