Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Преобразование DOS -> Win   Найти похожие ветки 

 
Tornado ©   (2004-04-06 13:04) [0]

Загружаю в Memo текстовой досовский файл, отображается русский текст естессено крякозябликами. Вопрос как преобразовать чтобы нормально отображалось? Спасибо.


 
Тимохов ©   (2004-04-06 13:06) [1]

найди в потрепаться топик "двадцать вопросов", там будет ответ.


 
Андрей Сенченко ©   (2004-04-06 13:07) [2]

Function WinToDos (stWin : string) : string;
var
 stDOS : pchar;
begin
 getmem(stDOS,1048);
 CharToOem(pchar(stWIN),stDOS);
 WinToDos := string(stDOS);
 freemem(stDOS);
end;

Function DosToWin (stDOS : string) : string;
var
 stWIN : pchar;
begin
 getmem(stWIN,1048);
 OemToChar(pchar(stDOS),stWIN);
 DosToWin := string(stWIN);
 freemem(stWIN);
end;


 
Anatoly Podgoretsky ©   (2004-04-06 13:07) [3]

OEM_CHARSET


 
KSergey ©   (2004-04-06 13:12) [4]

> Андрей Сенченко ©   (06.04.04 13:07)

Предложу способ без выделения спец. буфера:

 function WinToDosStr (const AWinStr: String): String;
 begin
   if Length(AWinStr) > 0 then  // для пустых строк ф-ция CharToOEM дает ошибку
   begin
     SetLength (Result, Length(AWinStr));
     CharToOEM (PChar(AWinStr), PChar(Result));
   end;
 end;

Ну и обратная конвертилка - в том же духе


 
Андрей Сенченко ©   (2004-04-06 13:21) [5]

KSergey ©   (06.04.04 13:12) [4]

CharToOEM (PChar(AWinStr), PChar(Result));

Было обсуждение пары моментов, при которых подобное обращение может выбить по AV.
Лично мне симпатичнее выделять на долю секунды нужное количество памяти


 
KSergey ©   (2004-04-06 13:24) [6]

А нельзя ли эти моменты озвучить? Что-то я пропустил...


 
Андрей Сенченко ©   (2004-04-06 13:29) [7]

KSergey ©   (06.04.04 13:24) [6]

Не сохранил я ту ветку к сожалению ... можно в архивах порыться - в середине февраля по-моему было обсуждение.


 
KSergey ©   (2004-04-06 13:30) [8]

Т.е. прмиерно тоже не запомнилось?
Жаль...


 
Андрей Сенченко ©   (2004-04-06 13:43) [9]

Не стал тогда вникать, думал вернусь - сохраню. Базовых знаний не хватает чтобы вникнуть сразу сразу без дополнительного лазанья по книжкам.
По-моему обсуждение касалось того, что указатель может потеряться вне адресного пространства данного процесса. Но гарантированнно сказать не могу, ламер потому что :)


 
Anatoly Podgoretsky ©   (2004-04-06 13:44) [10]

Можно, но только зачем вообще самому перекодировать, решение без перекодировки в [3] только желательно моноширинный труе тайп шрифт, поскольку речь про ДОС


 
panov ©   (2004-04-06 14:09) [11]

>Андрей Сенченко ©   (06.04.04 13:43) [9]
AV будет в случае передачи в качестве параметра пустой строки.


 
Tornado ©   (2004-04-06 15:10) [12]

OEM_CHARSET не помогает...вот как выглядит фраза (в ДОСе) "Уведомление от 01.04.04 13:18 о прочтении сообщения", а так в memo где font.charset := OEM_CHARSET :

"?_¤R¬<_-?_ R? 01.04.04 13:18 R ??R??_-?? ?RR??_-??


 
Андрей Сенченко ©   (2004-04-06 15:44) [13]

Пошукал по архивам, выложил парочку

http://www.sharan.nm.ru/Delphi/main72.html
http://www.sharan.nm.ru/Delphi/main260.html


 
KSergey ©   (2004-04-06 15:52) [14]

>  [10] Anatoly Podgoretsky ©   (06.04.04 13:44)
> Можно, но только зачем вообще самому перекодировать, решение
> без перекодировки в [3] только желательно моноширинный труе
> тайп шрифт, поскольку речь про ДОС

По заданному вопросу - да (хотя автор и не верит и, надо признать, я не совсем ему не верю)
А вот в разрезе поднятой проблемы конвертации?

>  [11] panov ©   (06.04.04 14:09)
> AV будет в случае передачи в качестве параметра пустой строки.

Дык для этого и проверяем ;) см. [4] KSergey ©   (06.04.04 13:12)


 
Андрей Сенченко ©   (2004-04-06 15:52) [15]

Tornado ©   (06.04.04 15:10) [12]

OEM_CHARSET не помогает...

Не мучайся. Возьми готовую функцию от KSergey ©   (06.04.04 13:12) [4] или мою Андрей Сенченко ©   (06.04.04 13:07) [2]


 
Anatoly Podgoretsky ©   (2004-04-06 16:08) [16]

Это может означать лишь одно, не сответвие локализации компьютера, тогда не поможет и OemToChar или то что кодировка файла не 866 в случае соответствия локализации. Кстати проверить можно просмотром шрифта Terminal
Поскольку с OEM_CHARSET показывает даже псевдографику, чего не достигнешь перекодировкой.


 
KSergey ©   (2004-04-06 16:28) [17]

>  [13] Андрей Сенченко ©   (06.04.04 15:44)

Спасибо большое, почитал.
Однако в основном там упоминались странноватые желания подпихнуть в качестве источника и приемника один и тот же буфер (да еще наслаивались проблемы константных выражений), либо "забывали" делать проверку на пустоту входной строки (при которой API-шная ф-ция не работает, что, на мой взгляд, странно. Ну да оставим это на совести MS (я не вижу другой причины)).
В своем же варианте я не вижу причины для какой-либо проблемы. Во всяком случае в разрезе упоминавшихся проблем.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
14-1081081131
Kolyan
2004-04-04 16:18
2004.04.25
задержка


1-1081235225
igse
2004-04-06 11:07
2004.04.25
надо нажать Alt+F4 программно


1-1081508409
hgd
2004-04-09 15:00
2004.04.25
Шрифт внутрь


14-1080823577
лена
2004-04-01 16:46
2004.04.25
1 апреля


14-1081148479
Nick-From
2004-04-05 11:01
2004.04.25
Геометрия