tkinter не может правильно отображать символы Юникода - PullRequest
0 голосов
/ 02 марта 2011

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

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

Я использую Python 3.1 и tkinter в Ubuntu.Я пытаюсь использовать тамильские символы Юникода.

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

Вот неверный дисплей как в 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

Может кто-нибудь помочь с этим?

Ответы [ 4 ]

2 голосов
/ 02 марта 2011

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

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

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

1 голос
/ 09 октября 2011

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

0 голосов
/ 04 марта 2011

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

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

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

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

0 голосов
/ 02 марта 2011

Похоже, что Tk неправильно обрабатывает такие вещи, как 'Class Zero Combining Marks', см .: http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820 (Таблица 4-4)

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

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

...