python 3,unicode转换,两个\ u0000作为一个字符

维克多·梅兹林(Victor Mezrin)

我的python3脚本通过管道从c ++程序接收字符串。通过Unicode代码点编码的字符串。我需要正确解码。

例如,考虑包含西里尔符号的字符串: 'тест test'

尝试使用python3:对该字符串进行编码print('тест test'.encode())我们有b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82 test'

C ++程序将此字符串编码为: b'\u00D1\u0082\u00D0\u00B5\u00D1\u0081\u00D1\u0082 test'

编码的字符串看起来非常相似-python3使用\x(2位)和c ++程序使用\u(4位)。但我不知道如何转换b'\u00D1\u0082\u00D0\u00B5\u00D1\u0081\u00D1\u0082 test''тест test'主要问题-python3被认为b'\u00D1\u0082\u00D0\u00B5\u00D1\u0081\u00D1\u0082'是8个字符的字符串,但它仅包含4个字符

马克·托洛宁

如果您从C ++收到的字符串在Python中是以下内容:

s = b'\u00D1\u0082\u00D0\u00B5\u00D1\u0081\u00D1\u0082 test'

然后,它将对其进行解码:

result = s.decode('unicode-escape').encode('latin1').decode('utf8')
print(result)

输出:

тест test

第一阶段将接收到的字节字符串转换为Unicode字符串:

>>> s1 = s.decode('unicode-escape')
>>> s1
'Ñ\x82еÑ\x81Ñ\x82 test'

不幸的是,Unicode代码点实际上是UTF-8字节值。latin1编码是1:第一256个Unicode码点1映射,与该编解码器转换的编码点返回至字节值中的字节字符串,以便编码:

>>> s2 = s1.encode('latin1')
>>> s2
b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82 test'

现在,可以将字节字符串解码为正确的Unicode字符串:

>>> s3 = s2.decode('utf8')
>>> s3
'тест test'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python在两个字符之间替换一个字符并保持休息

在python 3中解码(unicode_escape)一个字符串

使用Python将一个字符替换为多个字符

Python函数判断一个字符串中的两个单词是否以同一个字母开头

为什么'\ b'作为Python中句子的最后一个字符看起来无效?

将参数列表作为一个字符串传递给python函数

句子中两个连续元音前加一个字符?Python

在python中将unicode转换为两个单独的列表

Python连接一个字符串和一个变量

大文本文件:无法在python中将一个字符转换为另一个字符

替换python 3中的第一个字符串字符

在Python列表中两次使用一个字符串

在Python中将类别的列转换为一个字符串列

Python:在文本中的两个字符串之间找到一个字符串

在 Python 中打印时如何在其他两个字符串之间插入一个字符串

Python:查找一个字符以检索要替换为另一个字符的字符串索引

在python 3中用\x连接一个字符串

python 3 - ord 需要一个字符

Python 3:删除文件中最后一个字符的惯用方法

Python3 一个字符串到变量

在另一个程序的python 3字符串中,ü是两个字符,即u和umlaut。为什么?

Python:如何过滤包含一个字符但不包含多个字符的列

如何在Python中的一个字符串中组合单个字符

如何检查Python中的一个字符串中是否*个字符?

将多个字符串插入一个字符串(Python)

将多个字符写入文件,但只能看到一个字符?-Python

返回Python中字符串的最后一个字符

如何用一个字符分割Python并保持该字符?

Python在第一个字符后中断字符串