Python 3.x unicode和二进制字符串之间有什么区别?

Python 3.x unicode和二进制字符串之间有什么区别?,python-3.x,unicode,Python 3.x,Unicode,我在蟒蛇3.3 unicode字符串和二进制字符串之间有什么区别 b'\\u4f60' u'\x4f\x60' b'\x4f\x60' u'4f60' Unicode和二进制字符串的概念令人困惑。如何将b'\\u4f60'更改为b'\x4f\x60' 首先-python 3中unicode文本和字符串文本之间没有区别。它们是一样的-你可以把u放在前面。只要写字符串。因此,您应该立即看到,文本u'4f60'与编写实际的'4f60'一样 Abytesliteral-akab'some litera

我在蟒蛇3.3

unicode字符串和二进制字符串之间有什么区别

b'\\u4f60'
u'\x4f\x60'
b'\x4f\x60'
u'4f60'

Unicode和二进制字符串的概念令人困惑。如何将
b'\\u4f60'
更改为
b'\x4f\x60'

首先-python 3中unicode文本和字符串文本之间没有区别。它们是一样的-你可以把
u
放在前面。只要写字符串。因此,您应该立即看到,文本
u'4f60'
与编写实际的
'4f60'
一样

A
bytes
literal-aka
b'some literal'
-是一系列字节。32到127之间的字节(又称ASCII)可以显示为其对应的标志符号,其余的显示为转义版本。请不要对此感到困惑-
b'\x61'
b'a'
相同。这只是印刷的问题

字符串文字是字符串文字。它可以包含unicode代码点。这里要解释unicode的工作原理有太多的内容,但基本上一个代码点表示一个字形(本质上是一个字符,一个字母/数字的图形表示),它没有指定机器需要如何表示它。事实上,有很多不同的方法

因此,
字节
文字和
str
文字之间有很大的区别。前者描述机器表示,后者描述我们正在阅读的字母数字符号。两个域之间的映射是编码/解码

我这里跳过了很多重要的信息。不过这应该能让我们有所收获。我强烈推荐,因为这不是一个容易的话题


如何将
b'\\u4f60'
更改为
b'\x4f\x60'

让我们浏览一下:

b'\u4f60'
Out[101]: b'\\u4f60' #note, unicode-escaped

b'\x4f\x60'
Out[102]: b'O`'

'\u4f60'
Out[103]: '你'
所以,请注意,
\u4f60
就是那个汉字字形<如果我们用ascii(实际上是utf-8)表示,代码>\x4f\x60是字母O(
\x4f
),后跟反勾号

我可以要求python将unicode转义的
字节
序列转换为具有相应unicode标志符号的有效字符串:

b'\\u4f60'.decode('unicode-escape')
Out[112]: '你'
所以现在我们需要做的就是将编码为字节,对吗?嗯

回到我认为你想问的问题上来-

如何将
'\\u4f60'
更改为其正确的字节表示形式

该unicode代码点没有“正确”的字节表示形式。编码中只有您想要的表示形式。碰巧有一种编码直接匹配到
b'\x4f\x60'
-的转换


其工作原理是
utf-16
是一种可变长度编码。对于16位以下的代码点,它直接使用代码点作为2字节编码,而对于16位以上的代码点,它使用了一种称为“代理对”的东西,我将不再赘述。

想想roippi,它可以增强我的编程技术,将b'\\u4f60'转换为b'\x4f\x60',我该怎么做?
b'\\u4f60'。解码('unicode-escape')。编码('utf-16be')==b'\x4f\x60'
@J.F.Sebastian好吧,我会的(嘎,没想到代理项对)。编辑。您可以将Unicode代码点称为“字符”。它并不精确,但至少提供了一些直觉。“glyph”可能会让它听起来更正式。代码点的具体示例,如
'\u0061'=='a'
,和,或可能会有所帮助。有用的要点。我会努力让它对外行更友好一点。
b'\\u4f60'.decode('unicode-escape').encode('utf-16-be')
Out[47]: 'O`'