2011-03-02 4 views
0

python и tkinter корректно обрабатывают символы юникода.tkinter не может правильно отображать символы юникода

Но они не могут правильно отображать символы в кодировке Юникод.

Я использую Python 3.1 и tkinter в Ubuntu. Я пытаюсь использовать символы Unicode тамилов.

Вся обработка выполняется правильно. Но дисплей неправильный?

Здесь Неправильное отображение как в Tkinter

wrong https://docs.google.com/leaf?id=0B7YA7kky_NEoM2U3MzI5NGUtNTk2NC00MzYzLTk1N2YtMTJjYTA0Yjc0MmE1&hl=en_GB&authkey=CKORhugK

Вот Корректное отображение (как в Gedit)

correct https://docs.google.com/leaf?id=0B7YA7kky_NEoNDBmMzYzOWEtMjY5Ny00NWM5LWE0MWYtMTg1ZDVhOGQ2MmEz&hl=en_GB&authkey=CPWhi74J

Может кто-то пожалуйста, помогите по этому поводу?

+0

Я не могу ответить на ваш вопрос напрямую, но я бы посоветовал вам отказаться от tkinter и вместо этого использовать что-то современное, как PyQt. Вы будете благодарны, когда ваш проект будет расти. –

+0

@static_rtti: почему? tkinter - прекрасный язык, который очень хорошо масштабируется. –

+0

Вы уверены, что используете оба шрифта в одном случае? Естественно, если шрифт, который вы используете, не имеет глифа, он будет отображаться неправильно, и не все шрифты имеют все символы Юникода. –

ответ

2

Трудно диагностировать программу без кода. Посмотрите, можете ли вы свернуть код на что-то короткое, что показывает проблему, и опубликуйте это.

Я не знаком с тамильскими глифами, и они довольно маленькие, но, глядя на скриншоты, похоже, что все глифы есть, но некоторые глифы меняются местами, верно?

(Хм, я думаю, это должно было быть «комментарий», а не «ответ». Тем не менее найти свой путь вокруг этого сайта.)

0

Похоже Тк неправильного обращения вещи, как «Объединение знаков нулевой класс », см: http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820 (таблица 4-4)

Я полагаю, одну из последовательностей, которые не показывают правильно являются: 0BA9 кодовые 0BC6 (TAMIL слога NNNE), где 0BC6 класс reordrant нулевой отметки комбинирования в соответствии к стандарту Unicode, что в основном означает, что глифы меняются местами.

Единственный способ исправить это - подать сообщение об ошибке в трекере Tk и надеяться, что он будет исправлен.

+1

Исправление это, вероятно, будет довольно сложной задачей, требующей чего-то вроде панго или эквивалентного окна, чтобы правильно отобразить Тамил. – schlenk

0

Поскольку я не мог/не знал, как комментировать другие комментарии и ответы, я печатаю здесь.

@Bryan Oakley Я не думаю, что шрифт является проблемой здесь, но его рендеринг есть. Например, когда я набираю два символа unicode u0BAE и u0BC6, его следует объединить в виде одного символа тамильский, отображающего «மெ». Но я думаю, что движок рендеринга отсутствует в tkinter для отображения некоторых языков Unicode.

@ Vamana Да, индийские языки имеют «комбинированное обозначение одного символа», для которого требуются два символа Юникода, как я сказал выше. Когда я печатаю, скажем, charA, тогда charB, отображение должно отображать в один символ, например charBA. Но он отображает charAB (что неправильно).

@schlenk Да, вы правы. Я изначально использовал IDLE, а затем попытался запустить python в консоли linux, и отображаемый текст тамилов был ошибочным для отображения. Поэтому я пришел к tkinter. Теперь это тоже напрасно. В настоящее время я использую файл IO. Теперь я думаю, что я должен научиться создавать простую веб-страницу с использованием python для ввода и вывода, чтобы браузер отображал правильно.

1

Я столкнулся с подобными проблемами и обнаружил, что использовал Zero Width Joiner (U + 200D), чтобы явным образом сказать механизму рендеринга присоединиться к двум символам. Это работало в 2010 году, но похоже, что в движке рендеринга произошли изменения (о которых я теперь знаю), и теперь в 2011 году я обнаружил, что создание столяра создает проблему! (Он нарушил мой рабочий код) Мне пришлось удалить явные узлы с нулевой шириной, чтобы снова работать с моим кодом. Надеюсь это поможет.

Смежные вопросы