首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python2.7,unicode字符串的utf-32编码输出中的特殊字符意味着什么?

Python2.7,unicode字符串的utf-32编码输出中的特殊字符意味着什么?
EN

Stack Overflow用户
提问于 2016-05-18 19:30:53
回答 3查看 2K关注 0票数 4

我在玩python的unicode和编码方法,我使用了特殊的字符"‽“和一个汉字来查看不同的utf编码是如何处理这些字符的,并且我得到了这些输出。

代码语言:javascript
运行
复制
>>> a = u"‽"
>>> encoded_a = a.encode('utf-32')
>>> a
u'\u203d'
>>> encoded_a
'\xff\xfe\x00\x00= \x00\x00'
>>> b = u"安"
>>> encoded_b = b.encode('utf-32')
>>> b
u'\u5b89'
>>> encoded_b
'\xff\xfe\x00\x00\x89[\x00\x00'

我的问题是,在编码结果中,等号和等号括号意味着什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-18 21:56:49

打印字节字符串的repr时,通过\x7e\x20范围内的任何字节值都将转换为等效的ASCII可打印字符。在本例中,=\x3d相同,[\x5b相同。你错过了这个空间,就是\x20

这是完整的桌子:

代码语言:javascript
运行
复制
\x20 ' '    \x21 '!'    \x22 '"'    \x23 '#'
\x24 '$'    \x25 '%'    \x26 '&'    \x27 '''
\x28 '('    \x29 ')'    \x2a '*'    \x2b '+'
\x2c ','    \x2d '-'    \x2e '.'    \x2f '/'
\x30 '0'    \x31 '1'    \x32 '2'    \x33 '3'
\x34 '4'    \x35 '5'    \x36 '6'    \x37 '7'
\x38 '8'    \x39 '9'    \x3a ':'    \x3b ';'
\x3c '<'    \x3d '='    \x3e '>'    \x3f '?'
\x40 '@'    \x41 'A'    \x42 'B'    \x43 'C'
\x44 'D'    \x45 'E'    \x46 'F'    \x47 'G'
\x48 'H'    \x49 'I'    \x4a 'J'    \x4b 'K'
\x4c 'L'    \x4d 'M'    \x4e 'N'    \x4f 'O'
\x50 'P'    \x51 'Q'    \x52 'R'    \x53 'S'
\x54 'T'    \x55 'U'    \x56 'V'    \x57 'W'
\x58 'X'    \x59 'Y'    \x5a 'Z'    \x5b '['
\x5c '\'    \x5d ']'    \x5e '^'    \x5f '_'
\x60 '`'    \x61 'a'    \x62 'b'    \x63 'c'
\x64 'd'    \x65 'e'    \x66 'f'    \x67 'g'
\x68 'h'    \x69 'i'    \x6a 'j'    \x6b 'k'
\x6c 'l'    \x6d 'm'    \x6e 'n'    \x6f 'o'
\x70 'p'    \x71 'q'    \x72 'r'    \x73 's'
\x74 't'    \x75 'u'    \x76 'v'    \x77 'w'
\x78 'x'    \x79 'y'    \x7a 'z'    \x7b '{'
\x7c '|'    \x7d '}'    \x7e '~'

您的两个字符串实际上是'\xff\xfe\x00\x00\x3d\x20\x00\x00''\xff\xfe\x00\x00\x89\x5b\x00\x00'

票数 1
EN

Stack Overflow用户

发布于 2016-05-18 21:41:13

"\xff\xfe\x00\x00"是一个零宽度、无阻塞的空间字符,以其作为字节顺序标记(BOM)而闻名.我不明白为什么Python会将它插入到字符串中,但我确信有一种方法可以只请求给定字符串的编码,而不是其他程序识别为UTF-32的前缀。

后面是字节3d、20和另外两个空值,它们以小的endian字节顺序表示代码点203d。当解释为ASCII时,3d成为等号,20成为空间字符。

票数 2
EN

Stack Overflow用户

发布于 2016-05-18 20:15:40

前两个十六进制编码表示BOM,或Byte Order Mark。查看Unicode的Python文档,您看到的字符似乎是十六进制编码的转换。我正在查看文档中提供的示例之一,它似乎在做与您正在做的相同的事情,并且正在打印译文:

代码语言:javascript
运行
复制
8 >>> unistring.encode('utf-16')
9 '\xff\xfeH\x00i\x00\n\x00'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37308565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档