python - Python 中的 UTF-8 编码

标签 python unicode encoding utf-8

我有一个 UTF-8 字符,中间用“_”编码,例如“_ea_b4_80”。 我正在尝试使用替换方法将其转换为 UTF-8 字符,但我无法获得正确的编码。

这是一个代码示例:

import sys
reload(sys)  
sys.setdefaultencoding('utf8')

r = '_ea_b4_80'
r2 = '\xea\xb4\x80'

r = r.replace('_', '\\x')
print r
print r.encode("utf-8")
print r2

在此示例中,r 与 r2 不同;这是一个输出。

\xea\xb4\x80
\xea\xb4\x80
관  <-- correctly shown 

可能出了什么问题?

最佳答案

\x 仅在字符串文字中有意义,您不能使用 replace 来添加它。

为了得到你想要的结果,转换成字节,然后解码:

import binascii

r = '_ea_b4_80'

rhexonly = r.replace('_', '')          # Returns 'eab480'
rbytes = binascii.unhexlify(rhexonly)  # Returns b'\xea\xb4\x80'
rtext = rbytes.decode('utf-8')         # Returns '관' (unicode if Py2, str Py3)
print(rtext)

这应该让你如你所愿。

如果您使用的是现代 Py3,则可以避免导入(假设 r 实际上是一个 strbytes.fromhex,与 binascii.hexlify 不同,只采用 str 输入,而不是 bytes 输入)使用 bytes.fromhex 中的类方法binascii.unhexlify 的位置:

rbytes = bytes.fromhex(rhexonly)  # Returns b'\xea\xb4\x80'

关于python - Python 中的 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166992/

相关文章:

unicode - 在 Rust 中模拟 Python 的 `index(separator, start_index)`

unicode - Unicode 拉丁下标字母列表

python - 如何使 raw_input 调用函数

python - 如何从 Tensorflow 排名系统的输出文件中获取分数?

python - 如何从字典列表中删除 ('u' )unicode?

node.js - 如何将 base64 编码的内存图像作为文件参数发布

mysql - 为什么MySQL触发器变量不能处理特殊字符?

apache-flex - flex 中的实时流录制

python - 能够使用 ffmpeg 和 python 读取当前音频帧

从管道 bash 脚本运行时,Python 脚本不等待用户输入