擅长:python、mysql、java
<p>这是我目前发现的情况。在</p>
<p>python2.2接受的<a href="https://www.python.org/dev/peps/pep-0261/" rel="nofollow">PEP 261</a>引入了一个编译时标志,用窄的UTF-16表示或宽的UTF-32字符表示来构建unicode支持。选中<code>hex(sys.maxunicode)</code>或{<cd2>}以在运行时区分这些:窄构建将报告最大值<code>0xffff</code>和长度{<cd4>},wide构建最大值为<code>0x10ffff</code>,长度为{<cd6>}。^python3.3的{a2}隐藏了unicode字符串的实现细节,使所有字符串看起来都像UTF-32(除非必要,否则实际上不会浪费太多空间)。因此,3.3之前的窄版本将把星体平面上的代码点分解为代理项对,并独立地处理各个代理项,以便构造正则表达式和匹配的字符串。或者至少我找不到相反的迹象。在</p>
<p>正如Wiktor所指出的,我的例子非常愚蠢,因为我忘记了第二个字符串文本的<code>u</code>前缀。因此,Python2不会将其解析为转义序列,而是将其解析为字节字符串。这就解释了为什么即使考虑了代理项对,代码点似乎也不在这个范围内。在</p>
<p>至于预期的行为:自从python3.3以来,基于构建类型的区分应该已经过时了。将每个代码点视为一个单元,无论平面如何,这应该是Python3的前进方向。但是窄版本上的向后兼容性对旧版本来说是一个矛盾的目标。在</p>