Главная страница
    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.041 c
3-1080718832
Mary
2004-03-31 11:40
2004.04.25
Базы IB


11-1063796734
Revolter
2003-09-17 15:05
2004.04.25
VCL: (ssCtrl in shift); KOL: ?


1-1081361587
Distortion
2004-04-07 22:13
2004.04.25
Как сделать в меню серую часть сбоку для картинок?


4-1077907649
gavrila
2004-02-27 21:47
2004.04.25
WNetLogonA &amp; WNetLogoffA from mpr.dll


6-1077491066
Novichok
2004-02-23 02:04
2004.04.25
Socket и Buffer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский