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

Ваш аккаунт

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

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

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

конвертация ANSI-UTF16(LE)-ANSI

21K
15 февраля 2007 года
Sa[i]reS
24 / / 15.02.2007
Здравствуйте! Подскажите, каким образом можно открыть файл в кодировке UTF16 и сделать конвертацию в формат ANSI?
19K
16 февраля 2007 года
Aleksoid1978
8 / / 18.08.2006
[QUOTE='SareS;174263']Здравствуйте! Подскажите, каким образом можно открыть файл в кодировке UTF16 и сделать конвертацию в формат ANSI?[/QUOTE]

Попробуй набор компонентов TTntUnicodeControl - они работают с Unicode, сам с ними работаю. Сцылка - http://www.tntware.com/delphicontrols/unicode/. Там есть TTntStringList. Грузишь в него свой файл, а потом можно попробовать конвертнуть функцией Utf8ToAnsi(...).

Вообщем пробуй ...
21K
16 февраля 2007 года
Sa[i]reS
24 / / 15.02.2007
Цитата: Aleksoid1978
...попробовать конвертнуть функцией Utf8ToAnsi(...).

Вообщем пробуй ...



Я, честно говоря, не просто так указал UTF16. Дело в том, что в UTF8 и из UTF8 я уже конвертирую. Но мне нужно теперь именно UTF16.

257
16 февраля 2007 года
kosfiz
1.6K / / 18.09.2005
[quote='SareS']Здравствуйте! Подскажите, каким образом можно открыть файл в кодировке UTF16 и сделать конвертацию в формат ANSI?[/quote]
качай вот это. внутри найдешь CodeChanger.pas в файле есть функция UnicodeToWin - это , что тебе нужно, есть и обратная функция - вообщем смотри. я к примеру создал файлик UTF16(LE) потом считал из него и использовал функцию UnicodeToWin - все работает.
7.0K
16 февраля 2007 года
Rusd
88 / / 26.08.2006
Код:
[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;


примечания:
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
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог