[color=green]{ф-ция преобразования string-a в юникод UTF16LE}[/color]
function AnsiToUni(s:string):WideString;
var i:byte;
UniC:PWideChar;
begin
i:=length(s);
new(UniC);
while i>0 do
begin
StringToWideChar(s,UniC,2);
Result:=UniC^+Result;
dec(i);
end;
Dispose(UniC);
end;
procedure TForm1.Button1Click(Sender: TObject);
var ws:WideString;
f:file;
w:word;
i:byte;
s:string;
begin
assignFile(f,'output.doc');
s:='our line';
rewrite(f,2);
//w:=$FFFE; {UTF16 Big Endian}
w:=$FEFF; {UTF16 Little Endian}
BlockWrite(f,w,1); {записываем в начало файла либо FFFE, либо FEFF}
ws:=AnsiToUni(s);
//blockWrite(f,ws,length(ws));
for i:=1 to length(ws) do BlockWrite(f,ws,1);
CloseFile(f);
end;
конвертация ANSI-UTF16(LE)-ANSI
Здравствуйте! Подскажите, каким образом можно открыть файл в кодировке UTF16 и сделать конвертацию в формат ANSI?
Попробуй набор компонентов TTntUnicodeControl - они работают с Unicode, сам с ними работаю. Сцылка - http://www.tntware.com/delphicontrols/unicode/. Там есть TTntStringList. Грузишь в него свой файл, а потом можно попробовать конвертнуть функцией Utf8ToAnsi(...).
Вообщем пробуй ...
Цитата: Aleksoid1978
...попробовать конвертнуть функцией Utf8ToAnsi(...).
Вообщем пробуй ...
Вообщем пробуй ...
Я, честно говоря, не просто так указал UTF16. Дело в том, что в UTF8 и из UTF8 я уже конвертирую. Но мне нужно теперь именно UTF16.
качай вот это. внутри найдешь CodeChanger.pas в файле есть функция UnicodeToWin - это , что тебе нужно, есть и обратная функция - вообщем смотри. я к примеру создал файлик UTF16(LE) потом считал из него и использовал функцию UnicodeToWin - все работает.
Код:
примечания:
1) чтобы текст был читабельным в UTF16BE, необходимо расставить байты в каждом символе в переменной ws в обратном порядке.
2) результаты выполнения blockWrite(f,ws,length(ws)) и for i:=1 to length(ws) do BlockWrite(f,ws,1) по непонятным мне пока причинам сильно отличаются, видимо это из-за внутреннего представления WideString, если кто знает - пишите мне в личку.
P.S. можно еще поискать в направлении API-функции OemToCharW