2012-06-06 4 views
5

Zwei Python-Interpreter-Sitzungen. Die erste stammt von Python auf CentOS. Die zweite stammt von dem integrierten Python unter Mac OS X 10.7. Warum erstellt die zweite Sitzung Zeichenfolgen der Länge 2 aus der \ U-Escape-Sequenz und anschließend Fehler aus?Warum haben Mac OS X Python und CentOS Linux Python unterschiedliche Interpretationen von U Escapezeichen in Strings?

$ python 
Python 2.6.6 (r266:84292, Dec 7 2011, 20:48:22) 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> u'\U00000020' 
u' ' 
>>> u'\U00000065' 
u'e' 
>>> u'\U0000FFFF' 
u'\uffff' 
>>> u'\U00010000' 
u'\U00010000' 
>>> len(u'\U00010000') 
1 
>>> ord(u'\U00010000') 
65536 

$ python 
Python 2.6.7 (r267:88850, Jul 31 2011, 19:30:54) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
>>> u'\U00000020' 
u' ' 
>>> u'\U00000065' 
u'e' 
>>> u'\U0000FFFF' 
u'\uffff' 
>>> u'\U00010000' 
u'\U00010000' 
>>> len(u'\U00010000') 
2 
>>> ord(u'\U00010000') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: ord() expected a character, but string of length 2 found 

Antwort

4

Ich bin darüber nicht sicher, aber es kann sein, dass Ihr Mac OS X-System eine „enge Build“ von Python verwendet, die Unicode für interne mit nur 16 Bit repräsentiert Kodierung von Unicode und den Unicode-Codepunkten über 2 ** 16 als Zeichenpaar darstellt (die len(u'\U00010000') == 2 erklären würde.

unichr(0x10000) auf OS X Versuchen Sie und sehen Sie, wenn Sie einen Fehler mit Bezug baut einzuengen. siehe auch What encoding do normal python strings use?, insbesondere IVHs Antwort:

Es ist möglich, Python neu zu kompilieren, um einen Wide-Build zu verwenden, selbst wenn der Standard-Python auf Ihrem System einen Narrow-Build verwendet.

+1

Guter Fang. Das ist es wahrscheinlich. Siehe auch diesen Artikel: http://wordaligned.org/articles/narrow-python – dda

+0

Dies ist die richtige Antwort. Ich bekomme den Fehler über "schmale Python-Build" und sys.maxunicode gibt 65535 unter Mac OS X zurück. – audiodude

+1

@ user802500: Ich könnte ein Missverständnis sein, aber ist es nicht Mac OS, das in diesem Fall die schmale Build hat? – fholo

Verwandte Themen