当前位置:  开发笔记 > 编程语言 > 正文

如何将字符串中的文字转义序列转换为相应的字节?

如何解决《如何将字符串中的文字转义序列转换为相应的字节?》经验,为你挑选了1个好方法。

我有一个UTF-8编码的字符串,它来自包含字符的其他地方\xc3\x85lesund(文字反斜杠,文字“ x”,文字“ c”等)。

打印它会输出以下内容:

\xc3\x85lesund

我想将其转换为字节变量:

b'\xc3\x85lesund'

为了能够编码:

'Ålesund'

我怎样才能做到这一点?我正在使用python 3.4。



1> ThisSuitIsBl..:
使用 unicode_escape

TL; DR可以使用unicode_escape编码解码字节,以将序列转换\xXX\uXXXX转义为相应的字符:

>>> r'\xc3\x85lesund'.encode('utf-8').decode('unicode_escape').encode('latin-1')
b'\xc3\x85lesund'

首先,将字符串编码为字节,以便可以对其进行解码:

>>> r'\xc3\x85?'.encode('utf-8')
b'\\xc3\\x85\xe3\x81\x82'

(我更改了字符串以表明此过程甚至适用于Latin-1以外的字符。)

以下是每个字符的编码方式(请注意,?被编码为多个字节):

\ (U + 005C)-> 0x5c

x (U + 0078)-> 0x78

c (U + 0063)-> 0x63

3 (U + 0033)-> 0x33

\ (U + 005C)-> 0x5c

x (U + 0078)-> 0x78

8 (U + 0038)-> 0x38

5 (U + 0035)-> 0x35

? (U + 3042)-> 0xe3、0x81、0x82

接下来,解码字节unicode_escape以将每个转义序列替换为其对应的字符:

>>> r'\xc3\x85?'.encode('utf-8').decode('unicode_escape')
'Ã\x85ã\x81\x82'

每个转义序列都转换为一个单独的字符;每个不属于转义序列的字节都将转换为具有相应序数值的字符:

\\xc3 -> U + 00C3

\\x85 -> U + 0085

\xe3 -> U + 00E3

\x81 -> U + 0081

\x82 -> U + 0082

最后,再次将字符串编码为字节:

>>> r'\xc3\x85?'.encode('utf-8').decode('unicode_escape').encode('latin-1')
b'\xc3\x85\xe3\x81\x82'

编码为Latin-1只会将每个字符转换为其序数值:

U + 00C3-> 0xc3

U + 0085-> 0x85

U + 00E3-> 0xe3

U + 0081-> 0x81

U + 0082-> 0x82

瞧,我们有您要寻找的字节序列。

使用 codecs.escape_decode

或者,您可以使用该codecs.escape_decode方法来解释从字节到字节的转换中的转义序列,如user19087在类似问题的答案中所述:

>>> import codecs
>>> codecs.escape_decode(r'\xc3\x85lesund'.encode('utf-8'))[0]
b'\xc3\x85lesund'

但是,它codecs.escape_decode是未记录的,因此我不建议您使用它。

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有