Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Преобразование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
4-1077180092
GrayFace
2004-02-19 11:41
2004.04.25
Что такое Scan code (OEM)?


14-1080355228
Новичек
2004-03-27 05:40
2004.04.25
DelphiX .rar в Кладовке


14-1080915958
Delphi5.01
2004-04-02 18:25
2004.04.25
Рецепт плавленого ...


4-1074510385
Oyster
2004-01-19 14:06
2004.04.25
Какой диалог подстраивается под язык системы?


14-1080585174
Piter
2004-03-29 22:32
2004.04.25
А что с fido7.ru.delphi?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский