2010-07-06 7 views
2

Проблема классифицируется в два этапа:Unicode Woes! Ms-Access 97 миграции в Ms-Access 2007

Проблема Шаг 1. Access 97 дб, содержащий XML-строки, которые закодированы в UTF-8.

Проблема сводится к следующему: база данных Access 97 содержит строки 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;»).

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

Для некоторых греческих символов, как «Я • Ï ... i³. ISI ± Ii ± βιά» (, хранящиеся в Access-97), в результате новой строки содержит нулевой Charaters между ними, и когда она хранится в широкоформатные символы становятся обрезанными.

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

Проблема Шаг 2. Access 97 дб текстовых строки, приложения GUI принимает ввод Юникода и сохраняются в Access-97

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

Я пробовал вышеупомянутую функцию для преобразования текста (правильно ли это?), Результат снова был опрошен. Символы Spainsh, которые согласны с преобразованием, получают символ Юникода, потерянный или преобразованный в обычные алфавиты Ascii.

Греческие и Chineese символы показывает подобное поведение как mentined в шаге 1.

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

+0

Какая версия Delphi? Начиная с Delphi 2009, поддержка Unicode сильно изменилась. – mjn

+0

Его Delphi 2006 – Nains

+0

Невозможно «конвертировать из UTF-8 в Unicode», Unicode не кодирует символы :) Для преобразования в Access 2007 вам нужно знать, какая кодировка charcter используется для данных таблиц базы данных, например UTF -16 (что не то же самое, что и WideChar) – mjn

ответ

3

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

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

+0

Фактически, приложение действительно использует страницы кода, то есть, как только пользователь выбирает конкретный язык, соответствующий код страницы используется для его кодирования. Проблема заключается в ее хранении в Access-97. Я не уверен, что при сохранении этой информации кодирования сохраняется или теряется. – Nains

+1

Я имел в виду кодовую страницу, используемую в базе данных - если вы не имеете в виду, что приложение хранит строки с использованием разных кодировок в одном поле. Какую кодировку вы используете для греческих персонажей? –

+0

Ну, приложение использует Win code page 1253 для интерпретации греческих символов из Access 97 назад. N u r предлагает искать код страницы. База данных ссылается. Хорошо, я получил ур точку, n ищет это далее .... Спасибо .. – Nains

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