Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
schdub
Эксперт С++
3030 / 1374 / 419
Регистрация: 19.01.2009
Сообщений: 3,664
Завершенные тесты: 1
#1

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

16.07.2009, 22:33. Просмотров 4012. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2009, 22:33
Ответы с готовыми решениями:

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

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

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

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

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

10
Puporev
16.07.2009, 23:16
  #2

Не по теме:

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

0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
16.07.2009, 23:36 #3
Ерунда какая.
Во-первых по таблице будет быстрее.
Во-вторых - в WinAPI вроде есть такие функции.
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
17.07.2009, 08:35 #4
Во-вторых - в WinAPI вроде есть такие функции.
В Турбо Паскале все сплошь на WinAPI пишут.

Добавлено через 2 часа 9 минут 22 секунды
Во-первых по таблице будет быстрее.
А это что ли не по таблице?
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.07.2009, 08:37 #5
А это что ли не по таблице?
У тебя что логин украли ?
Где ты тут увидел таблицу ?
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
17.07.2009, 08:42 #6
Посмотрите здесь, столбец Hex.
Написать функцию, которая возвращает N правых символов в виде строки
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.07.2009, 08:47 #7
При чем тут столбец Hex ?
Я имею в виду, что код написанный polivets не оптимален.
1) Быстрее было бы использовать перекодировку по таблице.
Точнее две таблицы - туда и обратно.
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Зачем изобретать велосипед ?

Так понятнее или еще подробнее разъяснить ?
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
17.07.2009, 08:49 #8
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Вы по-моему не врубаетесь, в каком разделе пишете. Ну нет в Турбо Паскале, в котором работают большинство посетителей этой ветки, WinApi.
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.07.2009, 08:55 #9
Вы по-моему не врубаетесь, в каком разделе пишете. Ну нет в Турбо Паскале, в котором работают большинство посетителей этой ветки, WinApi.
Форум называется Pascal, Free Pascal.
Где написано, что все сидят на Turbo Pascal ?
0
schdub
Эксперт С++
3030 / 1374 / 419
Регистрация: 19.01.2009
Сообщений: 3,664
Завершенные тесты: 1
17.07.2009, 09:18  [ТС] #10
Цитата Сообщение от odip Посмотреть сообщение
Я имею в виду, что код написанный polivets не оптимален.
1) Быстрее было бы использовать перекодировку по таблице.
Точнее две таблицы - туда и обратно.
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Зачем изобретать велосипед ?
Модуль предназначен для TP, как мы уже выяснили, там нет WinAPI.

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

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

Не по теме:


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

1
Humanoid
Почетный модератор
9942 / 3846 / 343
Регистрация: 12.06.2008
Сообщений: 11,356
17.07.2009, 09:24 #11
Цитата Сообщение от odip
Форум называется Pascal, Free Pascal.
Где написано, что все сидят на Turbo Pascal ?
Но и нигде не сказано, что это под винду. По внешнему виду больше похоже на Turbo Pascal. Поэтому WinAPI не подходят. А по таблице будет занимать лишнюю память... а с ней в ДОСе могут быть проблемы, т.к. приложение обычно использует только один сегмент (64 КБ).
0
17.07.2009, 09:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2009, 09:24

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

Кодировки DOS и Windows
Как кодировать в формат ДОС и обратно. Например для чтения и записи в...

Как перекодировать записи из DOS-кодировки в Windows ?
Как мне перекодировать записи из DOS-кодировки в Windows ?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru