символы tcl utf-8 не отображаются должным образом в пользовательском интерфейсе - PullRequest
2 голосов
/ 20 июля 2011

Цель: иметь многоязычные символы в идентификаторе пользователя в Enovia v6

Я использую кодировку utf-8 в сценарии tcl, и кажется, что в базе данных правильно сохраняются многоязычные символы (после некоторого преобразования),Но в интерфейсе я буквально вижу сохраненную информацию из базы данных.

Выполняя те же упражнения через Power Web, сохраненные данные каким-то образом преобразуются обратно в надлежащие мультиязычные символы и отображаются правильно.

Я что-то упускаю при использовании подхода tcl?

Вставка одного примера, чтобы помочь лучше понять.

Исходное имя: Kátai-Pál Имя сохранено в базе данных как: Kátai-Pál В интерфейсе пользователя я вижу имя как: Kátai-Pál

В Tcl я использую приведенный ниже синтаксис set encoded [encoding convertto utf-8 Kátai-Pál];Теперь имя пользователя становится: Kâtai-Pāl В пользовательском интерфейсе я вижу имя как «Kātai-Pāl»

1 Ответ

1 голос
/ 21 июля 2011

Хитрость заключается в том, чтобы думать в терминах символов , а не байтов .Это разные вещи.Кодировки - это способы представления символов в виде байтовых последовательностей (внутренне Tcl действительно довольно сложный, но вам не нужно об этом беспокоиться, если вы не разрабатываете саму реализацию Tcl; достаточно сказать, что это Unicode).Таким образом, когда вы используете:

encoding convertto utf-8 "Kátai-Pál"

Вы берете последовательность символов и запрашиваете последовательность байтов (по одному на результат символ), которая является кодировкой этих символов взаданная кодировка (UTF-8).

Вам необходимо получить уровень интеграции базы данных, чтобы понять, какую кодировку использует база данных, чтобы он мог преобразовываться обратно в символы для вас (вы можете только когда-либо общатьсяиспользование байтов, все остальное - просто упрощение).Это может произойти двумя способами: либо информация передается правильно (с помощью метаданных или определенного соглашения), либо обе стороны делают предположения, которые время от времени остаются неприкрепленными.Похоже, что именно это и происходит, увы.

Если вы не можете справиться с этим другим способом, вы можете взять байты, полученные из слоя базы данных, и преобразовать в символы:

encoding convertfrom $theEncoding $theBytes

Выяснить, что должно быть $theEncoding, в общем, очень сложно, но, похоже, это utf-8 для вас.Как только у вас появятся символы, Tcl / Tk сможет правильно их отображать;он знает, как правильно передать их в кишки графического интерфейса платформы.(А в сценариях, которые вы на самом деле пишете, лучше всего заменять символы, не входящие в ASCII, на экранированные символы \uXXXX, потому что платформы не договариваются о том, какую кодировку использовать для сценариев. Увы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...