Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894

Готовый модуль для конвертирования текстовых строк из DOS кодировки в Windows и обратно

16.07.2009, 22:33. Показов 5822. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Часто возникает вопрос о конвертирование русских текстов в различных кодировках. Вот написал небольшой модуль для конвертирования текстовых строк из DOS кодировки в Windows и обратно.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
unit RUSCP;
 
INTERFACE
 
function WIN1251toOEM866(s : string) : string;
function OEM866toWIN1251(s : string) : string;
 
IMPLEMENTATION
 
{
*  WIN1251toOEM866
*  конвертируем из кодировки Windows в кодировку DOS.
}
function WIN1251toOEM866(s : string) : string;
var b, i : byte;
    ret  : string;
 
begin
  ret := '';
  for i:=1 to length(s) do
  begin
    b:= ord(s[i]);
         if (b>=$c0) and (b<=$df)
         or (b>=$e0) and (b<=$ef) then b := b - $40
    else if (b>=$f0) and (b<=$ff) then b := b - $10
    else if (b =$a8)              then b := $f0
    else if (b =$b8)              then b := $f1;
    ret := ret + Chr(b);
  end;
  WIN1251toOEM866 := ret;
end;
 
{
*  OEM866toWIN1251
*  конвертируем из кодировки DOS в кодировку Windows.
}
function OEM866toWIN1251(s : string) : string;
var b, i : byte;
    ret  : string;
 
begin
  ret := '';
  for i:=1 to length(s) do
  begin
    b:= ord(s[i]);
     if (b>=$80) and (b<=$9f) 
     or (b>=$a0) and (b<=$af) then b := b + $40
    else if (b>=$e0) and (b<=$ef) then b := b + $10
    else if (b =$f0)              then b := $a8
    else if (b =$f1)              then b := $b8;
    ret := ret + Chr(b);
  end;
  OEM866toWIN1251 := ret;
end;
 
begin
end.
Может кому пригодится.

Enjoy
3
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2009, 22:33
Ответы с готовыми решениями:

Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно
Программа преобразования текстовых файлов из кодировки DOS в кодировку Windows и обратно.

Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно (tasm)
Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно по теме &quot;Преобразование текстовых файлов из кодировки...

Перевод из кодировки Dos в Windows и обратно
Доброго времени суток. У меня такая проблема, как написать программу которая бы переводила текст из кодировки Dos в Windows и обратно.(В...

10
16.07.2009, 23:16

Не по теме:

С новым ником!

0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
16.07.2009, 23:36
Ерунда какая.
Во-первых по таблице будет быстрее.
Во-вторых - в WinAPI вроде есть такие функции.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.07.2009, 08:35
Во-вторых - в WinAPI вроде есть такие функции.
В Турбо Паскале все сплошь на WinAPI пишут.

Добавлено через 2 часа 9 минут 22 секунды
Во-первых по таблице будет быстрее.
А это что ли не по таблице?
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 08:37
А это что ли не по таблице?
У тебя что логин украли ?
Где ты тут увидел таблицу ?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.07.2009, 08:42
Посмотрите здесь, столбец Hex.
Написать функцию, которая возвращает N правых символов в виде строки
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 08:47
При чем тут столбец Hex ?
Я имею в виду, что код написанный polivets не оптимален.
1) Быстрее было бы использовать перекодировку по таблице.
Точнее две таблицы - туда и обратно.
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Зачем изобретать велосипед ?

Так понятнее или еще подробнее разъяснить ?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.07.2009, 08:49
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Вы по-моему не врубаетесь, в каком разделе пишете. Ну нет в Турбо Паскале, в котором работают большинство посетителей этой ветки, WinApi.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 08:55
Вы по-моему не врубаетесь, в каком разделе пишете. Ну нет в Турбо Паскале, в котором работают большинство посетителей этой ветки, WinApi.
Форум называется Pascal, Free Pascal.
Где написано, что все сидят на Turbo Pascal ?
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
17.07.2009, 09:18  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
Я имею в виду, что код написанный polivets не оптимален.
1) Быстрее было бы использовать перекодировку по таблице.
Точнее две таблицы - туда и обратно.
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Зачем изобретать велосипед ?
Модуль предназначен для TP, как мы уже выяснили, там нет WinAPI.

Я согласен, что использование XLAT-таблиц намного ускорит перекодирование большого текста, но у нас всего лишь тип String (255 символов). Да и сама откомпилированная программа на TP выполняется под Windows в 16 битной подсистеме, что такие тормаза, что никакой неоптимизированный алг не затмит.

Изобретать велосипед - это обычный довод, чтобы ничего не делать! А может кому-то будет интересно, как сделать свой кодировщик. Это всего лишь наработка - если она Вам не нравиться - никто не заставляет ее использовать.

Не по теме:


С новым ником!
Спасибо - прошлый долго было печатать :)

1
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
17.07.2009, 09:24
Цитата Сообщение от odip
Форум называется Pascal, Free Pascal.
Где написано, что все сидят на Turbo Pascal ?
Но и нигде не сказано, что это под винду. По внешнему виду больше похоже на Turbo Pascal. Поэтому WinAPI не подходят. А по таблице будет занимать лишнюю память... а с ней в ДОСе могут быть проблемы, т.к. приложение обычно использует только один сегмент (64 КБ).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2009, 09:24
Помогаю со студенческими работами здесь

В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

Какие функции есть для перевода из DOS-кодировки в Windows?
Какие функции есть для перевода из DOS-кодировки в Windows?

Кодировки DOS и Windows
Как кодировать в формат ДОС и обратно. Например для чтения и записи в файл.static void Main(string args) { string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru