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.
DOS -> Unicode
Тут же посыпался вагон проблем, одна из которых в кодировках...
Суть проблемы в следующем: Есть файл в кодировке ДОС (866 вроде) а данные необходимо из него получить в Unicode.
Нашел встроенный переводчик кодировок MultiByteToWideChar, только толком не понял, как это всё работает. Киньте парочку примеров, или посоветуйте другой путь решения проблемы.
2. Реализованный алгоритм (для потомков ):
Код:
3. Тему можно закрывать и отсылать сюда всех с аналогичной проблемой.