2015-07-31 2 views
2

Мне предоставлена ​​база данных MS Access со значениями на разных языках (английском, испанском, немецком, китайском). Все символы отображаются правильно в приложении Frontend, кроме китайского. Он показывает все случайные значения, такие как ящики и т. Д.Преобразование Unicode в C++ с использованием базы данных Microsoft Access

Итак, я просмотрел базу данных доступа Microsoft и не имеет никаких значений на китайском языке. Все, что у него есть, - это тарабарское множество символов, тогда как другие языки имеют правильные значения. Я не могу просто обновить базу данных новыми значениями в Юникоде, так как система очень старая, и мы не хотим ее менять, поскольку это было бы большим изменением.

Например:

English text: Printing Receipt ... 
Chinese text: ÕýÔÚ´òÓ¡Êվݡ­ (Yep, I have this value in MS Database) 

Мой вопрос, как я могу интерпретировать это? Что мне нужно сделать, чтобы преобразовать его в Unicode в C++?

Помощь или предложения будут высоко оценены.

ответ

1

Надеюсь, у вас есть кто-то под рукой, который может читать китайский язык и подтвердить, что результаты имеют смысл, потому что это потребует проб и ошибок.

Вполне вероятно, что WCHAR[] массива был переосмыслен как char[] в неизвестного кодирования, а затем сохраняется в качестве таковых. Чтобы вернуть китайцев, ваш лучший шанс - обратить вспять процесс. Я бы начал с CP1252, так как это обычная кодировка для Западной Европы.

По-прежнему, если какой-либо символ UTF-16 на входе заканчивается 00, то массив char[] будет завершен раньше, и часть строки никогда не будет сохранена.

+0

Ну, моя лучшая помощь будет из google translate. До сих пор я делал то же самое, как чтение шестнадцатеричных значений (все возможные комбинации во всех возможных кодировках), а затем, если возможно, их замену на Unicode и т. Д. Вручную на бумаге, но копии юникода при вставке в google translate дают мне некоторые смешные переведенные слова. Итак, я подумал, может быть, я пошел в неправильном направлении. –

+0

Например: слово Weekly хранится как ÖÜÆ ±. Когда я читаю его с кодировкой ANSI, я получаю «0xd6dcc6b1», с UTF-8 без спецификации «0xc396 0xc39c 0xc386 0xc2b1». Преобразование между этими ANSI и UTF-8 прекрасно, но это не настоящее слово, так как диапазоны Unicode не определены для серии C. –

+0

@MuhammadHassan: Отсутствует точка. Вам нужно будет отредактировать исходные данные и переосмыслить их как UTF-16. Что такое символ Unicode для «Weekly»? – MSalters

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