Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизWin to Dos, Unicode.. Найти похожие ветки
← →
pathfinder © (2006-12-12 11:11) [0]Добрый день!
Подскажите, пожалуйста, как лучше реализовать такую задачку: на входе есть текстовый файл в кодировке Win, а на выходе получаем два файла в Dos и Unicode кодировках.
в случае Дос понятно..CharToOem, а вот как перекодировать в Юникод?
← →
Dmitrij_K (2006-12-12 11:18) [1]
> вот как перекодировать в Юникод?
Еще прощеa : String;
w : WideString;
w := a;
← →
pathfinder © (2006-12-12 11:24) [2]
> Dmitrij_K (12.12.06 11:18) [1]
>
>
> > вот как перекодировать в Юникод?
>
> Еще проще
> a : String;
> w : WideString;
> w := a;
>
Спасибо)
← →
pathfinder © (2006-12-12 11:34) [3]var
List: TStringList;
u : widestring;
begin
List := TStringList.Create;
List.LoadFromFile(OpenDialog1.FileName);
u := list.Text;
теперь у нас текст в переменной u в юникоде..а как его сохранить в файл?
← →
Dmitrij_K (2006-12-12 11:41) [4]Попробуй так, код не проверял, но смысл такой.
FileStream.Write(sign, 2); // sign=$FF$FE - сигнатура
File.WriteBuffer(Pointer(w)^, Length(w)*2);
← →
Dmitrij_K (2006-12-12 11:42) [5]Очечатался, "File" это "FileStream"
← →
pathfinder © (2006-12-12 12:03) [6]а что означает
> sign=$FF$FE - сигнатура
?
← →
pathfinder © (2006-12-12 12:05) [7]или эти две строки взаимоисключающие?
← →
pathfinder © (2006-12-12 12:10) [8]List := TStringList.Create;
FileOut := ChangeFileExt(OpenDialog1.FileName, ".out");
List.LoadFromFile(OpenDialog1.FileName);
w := list.Text;
try
FileStream := TFileStream.Create(FileOut, fmCreate);
FileStream.WriteBuffer(Pointer(w)^, Length(w)*2);
finally
FileStream.Free;
end;
код вроде работает..если верить ворду кодировка действительно юникод и размер файла в 2 раза больше..
← →
Virgo_Style © (2006-12-12 12:10) [9]pathfinder © (12.12.06 12:03) [6]
Этот комментарий указывает, каким должно быть содержание sign
← →
pathfinder © (2006-12-12 12:11) [10]а для чего эта строка "FileStream.Write(sign, 2);" ?
← →
Dmitrij_K (2006-12-12 12:12) [11]Cигнатура нужно чтобы программы понимали что в файле текст в unicode кодировке. Попробуй в блокноте сохранить unicode текст, блоrнот запишет в начало файла $FF$FE.
См. http://ru.wikipedia.org/wiki/Unicode раздел "Порядок байтов"
← →
pathfinder © (2006-12-12 12:25) [12]а sign у нас имеет тип string?, т.е. можно написать так FileStream.Write("$FF$FE", 2)?
← →
pyJIoH © (2006-12-12 13:13) [13]var
sign: array [0..1] of byte;
begin
sign[0] := $FF;
sign[1] := $FE;
FileStream.Write(sign, 2)
...
← →
palva © (2006-12-12 13:17) [14]Нет, так нельзя. Нужно как-нибудь так:
buf: Word;
...
buf := $FEFF;
fs.Write(buf, 2);
← →
pyJIoH © (2006-12-12 13:28) [15]Почему нельзя?
← →
pathfinder © (2006-12-12 14:23) [16]пытаюсь теперь сохранить текст в UTF-8
код следующий:
var
List : TStringList;
W : WideString;
U : UTF8String;
FileStream : TFileStream;
sign : array [0..2] of byte;
begin
List := TStringList.Create;
sign[0] := $EF; sign[1] := $BB; sign[2] := $BF;
try
List.LoadFromFile(FileIn);
W := List.Text;
U := UTF8Encode(W);
finally
List.Free;
end;
try
FileStream := TFileStream.Create(FileOut, fmCreate);
FileStream.Write(sign, 3);
FileStream.WriteBuffer(Pointer(U)^, Length(U)*2);
finally
FileStream.Free;
end;
к тексту в результирующем файле добавляется еще какая-то хрень и ворд определяет кодировку как китайскую(
← →
AndreyRu (2006-12-12 14:32) [17]var
Source, Dest : PChar;
begin
AnsiToOem(Source, Dest);
OemToAnsi(Source, Dest);
end;
← →
pathfinder © (2006-12-12 14:41) [18]
> AndreyRu (12.12.06 14:32) [17]
Это конечно хорошо, но мне бы в UTF8..
← →
pyJIoH © (2006-12-12 14:56) [19]как работает у меня
var
Sign: array [0..2] of byte;
begin
Sign[0] := $EF;
Sign[1] := $BB;
Sign[2] := $BF;
FStream.WriteBuffer(Sign, Length(Sign));
S := UTF8Encode(Value);
FStream.WriteBuffer(S[1], Length(S));
FileStream.WriteBuffer(Pointer(U)^, Length(U)*2);
вот здесь вам не надо *2
← →
pathfinder © (2006-12-12 15:07) [20]
> pyJIoH © (12.12.06 14:56) [19]
Спасибо, и у меня заработало)
Всем спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c