<p>…他们被称为“编码”是有原因的</p>
<p>一个小小的序言:把unicode看作是一种规范,或者说是一种理想状态。Unicode只是一个字符表。65号是拉丁语大写字母A。937号是希腊语大写字母omega。就这样。</p>
<p>为了让计算机存储和操作Unicode,它必须将其编码成字节。Unicode最直接的<em>编码</em>是UCS-4;每个字符占用4个字节,大约1000000个字符都可用。4字节包含Unicode表中的字符数,作为4字节整数。另一个非常有用的编码是UTF-8,它可以用一到四个字节对任何Unicode字符进行编码。但也有一些有限的编码,如“latin1”,其中包括一个非常有限的字符范围,大多数是西方国家使用。这样的编码每个字符只使用一个字节。</p>
<p>基本上,Unicode可以用许多编码来<em>编码</em>,编码字符串可以<em>解码</em>为Unicode。问题是,Unicode的出现很晚了,所以我们所有使用8位<em>字符集</em>长大的人都太晚了,我们一直在使用<em>编码的</em>字符串。编码可以是ISO8859-1,或者WindowsCP437,或者CP850,或者,或者,或者,取决于我们的系统默认值。</p>
<p>因此,当您在源代码中输入字符串“add”Monitoring to list(我想您希望字符串“add”Monitoring to list”,注意第二个引号)时,实际上您使用的字符串已经根据系统的默认代码页进行了编码(按字节计算,我假设您使用的是Windows代码页1252,“西部”)。如果你想从中得到Unicode,你需要从“cp1252”编码中解码字符串。</p>
<p>所以,你的意思是:</p>
<pre><code>"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")
</code></pre>
<p>不幸的是,Python2.x还为字符串包含了一个<code>.encode</code>方法;这是一个方便的函数,用于“特殊”编码,如“zip”或“rot13”或“base64”编码,与Unicode无关。</p>
<p>无论如何,您要记住的来回Unicode转换是:</p>
<ul>
<li>Unicode字符串将<em>编码</em>为Python2.x字符串(实际上是一个字节序列)</li>
<li>Python 2.x字符串将<em>解码为Unicode字符串</li>
</ul>
<p>在这两种情况下,都需要指定要使用的<em>编码</em>。</p>
<p>我不太清楚,我困了,但我希望我能帮忙。</p>
<p>一个幽默的旁注:玛雅人没有Unicode;古罗马人,古希腊人,古埃及人也没有。他们都有自己的“编码”,几乎不尊重其他文化。所有这些文明都化为乌有。想想吧,人们!为了人类的利益,让你的应用程序知道Unicode。:)</p>
<p>请不要用“但是中国人…”来破坏前面的信息。但是,如果您觉得有必要这样做,那么可以考虑Unicode BMP主要是由中文表意字符填充的,从而延迟它,因此中文是Unicode的基础。只要人们开发出支持Unicode的应用程序,我就可以继续编造离谱的谎言。干杯!</p>