【问题标题】:Convert unicode characters to utf-8 in python在python中将unicode字符转换为utf-8
【发布时间】:2014-08-27 03:51:50
【问题描述】:

有人能告诉我如何在 python 中将 unicode 字符转换为 utf-8 吗?

例如:

输入 - अ अ घ ꗄ

输出 - E0A485 E0A485 E0A498 EA9784

我在 python 控制台中尝试了以下方法:

python 提示>>> character = "अ"

python 提示>>> 字符

python 提示>>> '\xe0\xa4\x85'

在上面的示例中,如果我只是在控制台中打印变量“字符”,我将得到 '\xe0\xa4\x85' 作为输出。但我需要 E0A485 形式的输出。简而言之,我得到的输出 '\xe0\xa4\x85' 有 3 个 '\x' 转义字符。我怎样才能摆脱这些 '\x's ?所以我的输出只是 e0a485 或 E0A485

【问题讨论】:

  • 如何获得输入?标准输入?一个文件?

标签: python unicode utf-8


【解决方案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'

【讨论】:

  • 你好 mhawke。感谢您的回复:) .. 它工作!如此简单..在编码比赛中对此有疑问并陷入困境:(。无论如何,非常感谢您的回答。
【解决方案2】:

您可以像这样使用带有反斜杠替换标志的编码:

>>> character.encode('ascii', 'backslashreplace')
b'\\u0905 \\u0905 \\u0918 \\ua5c4'

如果你想要大写,你可以随时添加 .upper()。

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多