在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")
编辑:如果print
ing 与您的终端编码不兼容,则指定特定编码将不起作用,因此只需让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
如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?