2013-05-12 2 views
1

Я заканчиваю приложение в Visual C++/Windows API, и я использую MySql C Connector.Как правильно отображать символы с разных языков?

Весь код приложения использует ANSI, MySql C Connector также в ANSI.

Эта программа будет использоваться на польском и немецких компьютеры с Windows XP/Vista/7 или 8.

Я хочу correcly отображения немецких умляутов и польский символов акцента на:

  • управления DialogBox (строки загружаются из языковых файлов)
  • порожденных документов XHTML
  • строк, извлекаемых из базы данных MySql на экране управления и в XHTML документов

Я слышал о функциях MultiByteToWideChar и Unicode (MessageBoxW и т.д.), но код приложения почти закончен, преобразовывая много работы ...

Как сделать кодировку правильно с наименьшей работы и время?

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

ответ

2

Во-первых, конечно: какой набор кодов возвращает MySQL? Или, может быть: какой код был использован при записи данных в базу данных?

Кроме того, я не думаю, что вы будете в состоянии избежать использования либо широких символов или многобайтовое символов: для одного байта символов, немецкий будет использовать ISO 8859-1 (кодовая страница 1252) или ISO 8859-15, польский ISO 8859-2 (кодовая страница 1250). Но что такое , которое вы делаете с персонажами в вашем собственном коде? У вас может быть , чтобы уйти с UTF-8 (кодовая страница 65001), без особых изменений. Настоящий вопрос заключается в том, где персонажи изначально исходят от (хотя, возможно, было бы не слишком сложно перевести их в UTF-8 сразу же в источнике); Я не думаю, что Windows уважает кодовую страницу ввода.

Хотя это не поможет вам много знать, вы имеете дело с почти невозможным проблемой, так как очень многое зависит от вещей вне вашей программы: вещи, как кодирование шрифта дисплея, или например, драйвер клавиатуры. Фактически, не редкость для программ показывать одну вещь на экране, и что-то другое при выводе на принтер, или на отображает на экране одну вещь, но что-то другое, если данные записываются в файл, и читать с другой программой. Улучшается ситуация — Современная Unix и Интернет: постепенно (очень постепенно) стандартизация по UTF-8, везде и для всего, и Windows обычно использует UTF-16 для все, что является чистой Windows (но должно поддерживать UTF -8 для Интернет). Но даже использование стандартной платформы не поможет , если человеческий клиент установил (и использует) шрифты, которые не имеют необходимых символов.

+0

Когда я пишу на MySql и получаю с моей программой все символы верны. Когда я пишу с помощью phpMyAdmin, но получение с символами программы неверно. Но я не знаю, будет ли на немецких Windows это тоже правильно (у меня только полировка Windows). В MySql есть utf8_bin. – David

+0

@David За какое определение правильного? Я полагаю, что MySQL в значительной степени нейтрален по содержанию, по крайней мере, для полей varchar. Таким образом, все программы вернут все, что было написано. Но то, что написано, на самом деле не является символом, а точками кода - маленькими целыми значениями. Вопрос заключается в том, как программа, которая читает, интерпретирует эти значения. Если вы пишете UTF-8, а программа, которая читает, интерпретирует значения как ISO 8859-1, это не сработает. Вот почему я сказал, что это почти невозможная проблема - если у вас нет абсолютного контроля над всеми элементами в цепочке. –

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