Ubuntu 11.10:
$ python
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = u'\U0001f44d'
>>> len(x)
1
>>> ord(x[0])
128077
Windows 7:
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x = u'\U0001f44d'
>>> len(x)
2
>>> ord(x[0])
55357
Мой опыт Ubuntu связан с интерпретатором по умолчанию в дистрибутиве. Для Windows 7 я загрузил и установил рекомендованную версию, связанную с python.org. Я тоже не скомпилировал ни одного из них.
Характер разницы ясен для меня. (На Ubuntu строка представляет собой последовательность кодовых точек, а в Windows 7 - последовательность блоков кода UTF-16.) Мои вопросы:
- Почему я наблюдаю эту разницу в поведении? Это связано с тем, как построен интерпретатор, или с разницей в зависимых системных библиотеках?
- Есть ли способ настроить поведение интерпретатора Windows 7, чтобы согласиться с Ubuntu, что я могу сделать в Eclipse PyDev (моя цель)?
- Если мне нужно перестроить, есть ли готовые интерпретаторы Windows 7, которые ведут себя как Ubuntu выше из надежного источника?
- Есть ли какие-либо обходные пути для этой проблемы, кроме ручного подсчета суррогатов в строках
unicode
только для Windows (blech)? - Это оправдывает отчет об ошибке? Есть ли вероятность, что такой отчет об ошибке будет рассмотрен в 2.7?