Перекодировка из cp866 в cp1251
От: Аноним  
Дата: 18.02.02 12:43
Оценка:
Мастера, подскажите как конвертировать данные из таблицы DBASE IV (cp 866 — Clipper)
в cp 1251 Paradox. Прооблема в том, что это нужно делать из программы, по одной записи а не всю таблицу сразу.
Re: Перекодировка из cp866 в cp1251
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 18.02.02 13:00
Оценка:
Здравствуйте Аноним, Вы писали:

А>Мастера, подскажите как конвертировать данные из таблицы DBASE IV (cp 866 — Clipper)

А>в cp 1251 Paradox. Прооблема в том, что это нужно делать из программы, по одной записи а не всю таблицу сразу.

На мастера не претендую, но способ знаю:

Берешь таблицу соответствия таблиц кодировок
  unsigned char cpAltWin[0x100] = { 
    // Здесь по индексу символа в таблице cp866 лежит номер этого
    // символа в Win1251 в количестве 256 штук. 
  };
  ...
  // В месте перекодировки посылаешь строку, и делаешь 
  // посимвольное преобразование:
  unsigned char cDecoded = cpAltWin[(unsigned char)someChar];
  ...


Ну, дальше — самодеятельность. Этот кусок кода можно оформить как функцию, перегоняющую содержимое одного буффера/контейнера в другой, либо in-place конвертить (тогда слева тот-же чар должен стоять, что и справа)...

Таблицу соответствия можно, например, получив, напечатав в Фаре (программно, конечно) эти самые 256 символов и их индексы в кодировке cp866, а потом просмотреть его в Win, и руками забить.

С уважением
Алексей Кирдин
Re[2]: Перекодировка из cp866 в cp1251
От: IgMel  
Дата: 19.02.02 03:23
Оценка:
Здравствуйте Kaa,
Спасибо за совет, если ничего другого не придумаю, то так и сделаю.
Я всетаки надеялся, что есть какая-то стандартная функция для этого
Re: Перекодировка из cp866 в cp1251
От: AndreyN Россия  
Дата: 19.02.02 09:08
Оценка:
Здравствуйте Аноним, Вы писали:

А>Мастера, подскажите как конвертировать данные из таблицы DBASE IV (cp 866 — Clipper)

А>в cp 1251 Paradox. Прооблема в том, что это нужно делать из программы, по одной записи а не всю таблицу сразу.
Это смотря на чем ты пишешь, а в дельфях есть такая функция oemtochar, с помощью которой тебе и надо перегонять поля по одному из одной таблицы в другую.
Два вложенных цикла по полям и по записям. Элментарно, но ужасно действенно.
Андрей.
Нагорный А.Н.
Re[3]: Перекодировка из cp866 в cp1251
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 19.02.02 09:26
Оценка:
Здравствуйте IgMel, Вы писали:

IM>Спасибо за совет, если ничего другого не придумаю, то так и сделаю.

IM>Я всетаки надеялся, что есть какая-то стандартная функция для этого
Позволю себе заметить, что этот способ — наиболее действенный и быстрый. Представь, ведь ты экономишь на вызове функции для каждого символа! Единственная операция — взятие элемента по индексу (1 раз) + присваивание. Куда быстрее? Да и зависить ни от кого не будешь

С уважением
Алексей Кирдин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.