Юникод Горе! Ms-Access 97 переход на Ms-Access 2007 - PullRequest
2 голосов
/ 06 июля 2010

Проблема классифицируется в два этапа:

Проблема Шаг 1. Доступ к 97 дБ, содержащим строки XML, которые кодируются в UTF-8 .

Проблема сводится кк этому: Access 97 db содержит строки XML, которые закодированы в UTF-8.Поэтому я создал инструмент исправления для отдельного преобразования строк XML из UTF-8 в Unicode.Чтобы преобразовать строку UTF8 в Unicode, я использовал функцию MultiByteToWideChar (CP_UTF8, 0, PChar (OriginalName), -1, @newName, Size); . (Где newName - это массив объявленных значений) * newName: Array [0..2048] of WideChar;").

Эта функция хорошо работает в большинстве случаев, я проверил ее с испанскими, арабскими символами.но я работаю над греческими и китайскими персонажами, это душит.

Для некоторых греческих символов, таких как «Î • Ï… γ. ΚΠ± ÏÎ ± βιά» (, как хранится в Access-97 ), результирующая новая строка содержит нулевые символы между ними,и когда он хранится в широкой строке, символы обрезаются.

Для некоторых китайских символов, таких как «?  ¢ »? »(, как хранится в Access-97 ), результат совершенно абсурдный, как «? ¢»? µ? ».

Задача Шаг 2. Доступ к текстовым строкам на 97 дБ, графический интерфейс приложения принимает ввод в Unicode и сохраняется в Access-97

Сначала я сверился с арабскими и испанскими символами, потом кажется, что явного кодирования символов не требуется.Но опять же проблема возникает с греческими и китайскими персонажами.

Я попробовал вышеупомянутую ту же самую функцию для преобразования текста (Это правильно ???), результат снова был разочаровывающим.Испанские символы, которые не подходят для преобразования, получают символы Юникода либо потерянные, либо преобразованные в обычные алфавиты Ascii.

Символы греческого и китайского демонстрируют поведение, аналогичное описанному на шаге 1.

Пожалуйста, руководствомне.Я правильно выбрал подход?Есть ли какой-то другой способ обойти ???Ну, щас я запутался и полон вопросов :)

1 Ответ

3 голосов
/ 06 июля 2010

Специальных требований для работы с греческими символами не существует.Настоящая проблема заключается в том, что символы хранятся в кодировке, которую Access не распознает в первую очередь.Когда приложение сохраняло значения UTF8 в базе данных, оно пыталось преобразовать каждый байт в эквивалентный байт в кодовой странице базы данных.Каждый символ, который не имел соответствия в этой кодировке, был заменен на?Это может означать, что с греческим текстом все в порядке, а с китайским - нет.

Чтобы преобразовать данные во что-то читаемое, вы должны знать кодовую страницу, в которой они хранятся. Используя это, вы можете получитьфактические байты, а затем преобразовать их в Unicode.

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