|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.07.2008, 12:36 | #1 |
Регистрация: 03.03.2008
Сообщений: 3
|
Кодировка
есть файл txt в 1251 кодировке как перевести в 866 кодировку и обратно во время выполнения программы.
|
08.07.2008, 12:42 | #2 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
CharToOem(), CharToOemBuff()
OemToChar(), OemToCharBuff() http://msdn.microsoft.com/en-us/libr...78(VS.85).aspx |
08.07.2008, 12:45 | #3 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Очень часто при разработке программ которые в той или иной форме используют текст программисты сталкиваются с текстами различных кодировок. Данная заметка призвана в некоторой степени облегчить им жизнь и рассказать о работе с разными кодировками текста
Постановка задачи Итак. У нас есть кириллический текст с наперед известной кодировкой: cp1251 - Кодовая страница windows iso8859-5 - iso-страница koi8-u - Кодовая страница используемая практически во всех версиях в unix mac-u - Страница используемая в macos ruscii - или старая добрая codepage 866 известная всем жившим в период dos. Теперь же нам требуется предоставить пользователю возможность прочесть этот текст в нормальном виде. Для этого нам надобно перевести текст с этой кодовой страницы в ту, которая используется системой в данный момент, а так как большинство читателей используют в своей повседневной жизни windows, то текст мы будем приводить в соответствие со стандартной кодовой страницей windows - cp1251. Решение Решение данной задачи не столько сложно в плане логическом, сколько в технологическом. Так как тем программистам, которые специально не занимались этой проблемой бывает довольно трудно отыскать ту или иную кодовую страницу, а потом с первого раза привести ее в "рабочий" вид. Теперь пристально вглядевшись в таблицы кодировок (рис.1 - рис.5) мы замечаем, что вся разница в кодовых страницах начинает проявляться только для второй половины таблицы (т.е. для символов с кодами 128-255, которые и изображены на рисунках). Теперь нам только понадобится вручную сопоставить коды из каждой таблицы в соответствии с кодами текущей кодовой страницы (cp1251). (см. Листинг 1). Сам алгоритм может варьироваться от програмиста к програмисту. Но суть его должна быть одна и та же: выбрать символ, просмотреть таблицу перекодировки и если найдено совпадение - заменить символ. Примерный код алгоритма перебора подан ниже: Код:
s - строка текста, которую следует перекодировать a - массив перекодировки символов из соответствующей кодировки в cp1251. "Подводные камни" Хотя приведенный алгоритм не смотря на простоту реализации и дает необходимый результат, но при прямом его использовании могут возникнуть некоторые несоответствия называемые "двойной перекодировкой". Так к примеру получается, если мы перетаскиваем текст (через буфер обмена) из какой-то программы работающей в кодировке koi8 в текстовый редактор (к примеру far - f4), Который в это время находится в режиме редактирования dos - текста (рис.6 - рис.7). Тот же эффект можно видеть и при любых других комбинациях кодировок. Как раз для этого в таких продвинутых в кодовом плане программах как thebat! предусмотрена "двойная перекодировка"(рис.8). И конечно же не стоит упоминать о том что можно найти текст, разные части которого написаны в разных кодировках, или, что еще хуже, с использованием разных вариантов "двойной перекодировки". Все эти ухищрения отнюдь не облегчают проблему распознавания кодировок, и заставляют программистов искать более совершенные методы эвристического анализа текста. Выводы Конечно эта маленькая заметка не претендует на роль всеобъемлющего руководства для построения "мультикодовых" приложений. Она всего лишь маленький шаг направленный в сторону облегчения общения людей работающих в разных средах, использующих различные ОС и ПО. И конечно же основная работа для обеспечения поддержки программами различных кодировок, или даже поддержки автоматического распознавания кодировок, возлагается как всегда на Вас - разработчиков этих самых программ. //если вы ссылаетесь на сторонний ресурс, то копировать/вставить делаем сюда + копирайт. zetrix Последний раз редактировалось zetrix; 08.07.2008 в 14:48. |
08.07.2008, 12:54 | #4 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
1 способ
Код:
Код:
|
08.07.2008, 13:16 | #5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Это откуда взялось?! Длина может быть любая.
Код:
Последний раз редактировалось Somebody; 08.07.2008 в 13:23. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Кодировка | Nixtone | Помощь студентам | 4 | 27.05.2008 14:12 |
UTF-8 кодировка | OrdJONY | Общие вопросы Delphi | 2 | 23.03.2008 16:56 |
Кодировка Dbf | Nikolaeva | БД в Delphi | 7 | 05.02.2008 13:24 |
Кодировка | satana | Общие вопросы Delphi | 1 | 20.12.2007 02:53 |