繁体   English   中英

Python unicode代码点到unicode字符

[英]Python unicode codepoint to unicode character

我正在尝试将一些中文、俄语或各种非英语字符集写入平面文件以进行测试。 我被困在如何将 Unicode 十六进制或十进制值输出到其相应的字符上。

例如,在 Python 中,如果您有一组硬编码的字符,例如абвгдежзийкл您可以分配value = u"абвгдежзийкл" ,没问题。

但是,如果您在变量中存储了一个十进制或十六进制十进制,例如 1081 / 0439,并且您想用它对应的实际字符(而不仅仅是输出 0x439)打印出来,这将如何完成? 上面的 Unicode 十进制/十六进制值指的是й

Python 2 :使用unichr()

>>> print(unichr(1081))
й

Python 3 :使用chr()

>>> print(chr(1081))
й

所以这个问题的答案是:

  1. 使用int(hex_value, 16)将十六进制值转换为十进制值
  2. 然后使用chr()获取相应的字符串。

总结一下:

>>> print(chr(int('0x897F', 16)))
西

在处理包含解析一些 JSON 的项目时,我遇到了类似的问题。 我有很多字符串都像这样转义了所有非 ASCII 字符:

>>> print(content)
\u0412\u044B j\u0435\u0441\u0442\u0435 \u0438\u0437 \u0420\u043E\u0441\u0441\u0438\u0438?
...
>>> print(content)
\u010Cemu jesi na\u010Dinal izu\u010Dati med\u017Euslovjansky jezyk?

使用unichr()逐个符号地转换这种混合会很乏味。 我最终决定的解决方案:

content.encode("utf8").decode("unicode-escape")

第一个操作(编码)产生这样的字节串:

b'\\u0412\\u044B j\\u0435\\u0441\\u0442\\u0435 \\u0438\\u0437 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0438?'
b'\\u010Cemu jesi na\\u010Dinal izu\\u010Dati med\\u017Euslovjansky jezyk?'

第二个操作(解码)将字节字符串转换为 Unicode 字符串,但将\\\\替换为\\ ,“解包”字符,得到如下结果:

Вы jесте из России?
Čemu jesi načinal izučati medžuslovjansky jezyk?

如果您遇到错误:

ValueError: unichr() arg 不在范围内 (0x10000)(窄 Python 构建)

在尝试使用unichr转换十六进制值时,您可以通过执行以下操作来解决该错误:

>>> n = int('0001f600', 16)
>>> s = '\\U{:0>8X}'.format(n)
>>> s
'\\U0001F600'
>>> binary = s.decode('unicode-escape')
>>> print(binary)
😀

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM