在python中从十六进制字符转换为Unicode字符

Posted

技术标签:

【中文标题】在python中从十六进制字符转换为Unicode字符【英文标题】:Convert from hex character to Unicode character in python 【发布时间】:2011-10-23 09:44:27 【问题描述】:

十六进制字符串'\xd3'也可以表示为:Ó

我发现将十六进制字符串的字符表示到控制台的最简单方法是:

print unichr(ord('\xd3'))

或者用英语,将十六进制字符串转换为数字,然后将该数字转换为 unicode 代码点,最后将其输出到屏幕上。这似乎是一个额外的步骤。有没有更简单的方法?

【问题讨论】:

【参考方案1】:
print u'\xd3'

这就是你所要做的。你只需要以某种方式告诉 Python 它是一个 unicode 文字;领先的u 就是这样做的。它甚至适用于多个字符。

如果您不是在谈论文字,而是在谈论变量:

codepoints = '\xd3\xd3'
print codepoints.decode("latin-1")

编辑:如果printing 与您的终端编码不兼容,则指定特定编码将不起作用,因此只需让print 自动执行encode(sys.stdout.encoding)。谢谢@ThomasK。

【讨论】:

但是,如果你有一个由代码点组成的字符串,你会怎么做?您如何将字符串转换为实际的字符串表示形式? u 是一个函数吗?我们可以写u(some_string)吗? @Geo:u 不是函数,它是字符串文字语法的一部分。但是什么是“由代码点组成的字符串”? @ThomasK 我无法检查,因为我认为我的终端是 latin-1 或那么愚蠢,几乎相同的 winodws 编码。它对我有用。 它在 Python3 中要好一些(Python2 正在被淘汰),但即使在最好的日子里,Unicode 和 Python 也不能很好地相处,而且你不能使用 Python 的 re 库来处理每个 UTS 的 Unicode #18 的 1 级要求。 Matthew Barnett 针对 Python2 和 Python3 的 regex library 有很大帮助。请参阅 my Unicode Support Shootout talk 的幻灯片 6 上的图表,了解 MRAB 的 regex 库比普通 Python re 好得多。唉,但是在 UCS‐²⁄₄ 上,你仍然有 Python 致命的多重人格障碍 版主说明 此答案下的几个 cmets 已被删除,因为它们提供的噪​​音多于信号。请尽量让 cmets 保持建设性和主题,与手头的答案相关。如果您想进行“边聊”,请使用聊天系统。【参考方案2】:

如果数据是这样的 "\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\xb2\xe0\xa5\x8b \xe0\xa4\x95\xe0\xa4\xb2"

sys.stdout.buffer.write(data) 

会打印

हैलो कल

【讨论】:

【参考方案3】:

不久前,我遇到了一个非常相似的问题。我必须解码包含unicode hex(例如_x0023_)而不是特殊字符(例如#)的文件。解决方案在以下代码中描述:

脚本

from collections import OrderedDict
import re


def decode_hex_unicode_to_latin1(string: str) -> str:
    hex_unicodes = list(OrderedDict.fromkeys(re.findall(r'_x[?:\da-zA-Z]4_', string)))

    for code in hex_unicodes:
        char = bytes.fromhex(code[2:-1]).decode("latin1")[-1]
        string = string.replace(code, char)

    return string


def main() -> None:
    string = "|_x0020_C_x00f3_digo_x0020_|"
    decoded_string = decode_hex_unicode_to_latin1(string)
    print(string, "-->", decoded_string)

    return


if __name__ == '__main__':
    main()

输出

|_x0020_C_x00f3_digo_x0020_| --> | Código |

【讨论】:

以上是关于在python中从十六进制字符转换为Unicode字符的主要内容,如果未能解决你的问题,请参考以下文章

Python:将 Unicode-Hex-String 转换为 Unicode

python怎么将字符串转化为八位二进制

python实现全角半角的相互转换

如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?

如何在 C++ 中将字符的十进制代码转换为 Unicode 字符串?

将十六进制 unicode 字符转换为其可视化表示