Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DOS -> Unicode

8.9K
09 июля 2007 года
Abadonne
26 / / 26.01.2006
По долгу службы пришлось перейти с программирования под С++ Builder на Delphi.

Тут же посыпался вагон проблем, одна из которых в кодировках...

Суть проблемы в следующем: Есть файл в кодировке ДОС (866 вроде) а данные необходимо из него получить в Unicode.

Нашел встроенный переводчик кодировок MultiByteToWideChar, только толком не понял, как это всё работает. Киньте парочку примеров, или посоветуйте другой путь решения проблемы.
8.9K
09 июля 2007 года
Abadonne
26 / / 26.01.2006
1. Всем спасибо.
2. Реализованный алгоритм (для потомков ):


Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
        Memo1.Lines.LoadFromFile('c:\\txt.txt'); //загоняем в мемо1 текст с файла с кодировкой 866
end;


//функция отвечающая за перевод
function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
  l: integer;
begin
  if s = '' then
    Result := ''
  else
  begin
    l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
    SetLength(Result, l - 1);
    if l > 1 then
      MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
        - 1, PWideChar(@Result[1]), l - 1);
  end;
end;



procedure TForm1.Button2Click(Sender: TObject);
 var
   ss : string;
   s1 : string;
 begin
 ss:=Memo1.Text; //читаем текск с мемо1
 s1 := StringToWideString(ss, 866); //переводим. Теоретическо можно  так: s1 := StringToWideString(Memo1.Text, 866); но я не пробовал.
 Memo2.Clear;
 Memo2.Lines.Add(s1); //выводим в мемо2
 end;

end.


3. Тему можно закрывать и отсылать сюда всех с аналогичной проблемой.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог