Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизНужна помощь с переводом в Unicode. Найти похожие ветки
← →
Golleador (2003-10-27 23:21) [0]Подскажите, плз, как можно строку конвертировать в Unicode.
Пробовал функцией StringToWideChar(FileName, CFileName, 80), но не получилось...
← →
Ломброзо (2003-10-27 23:29) [1]С какими целями?
← →
Islander (2003-10-27 23:31) [2]s: string;
w: widestring;
begin
s:="blablabla";
w:= WideString (s);
Понятно?
← →
Ломброзо (2003-10-27 23:51) [3]> Islander (27.10.03 23:31) [2]
Это даже первоклассник знает. Ну получили вы Widestring - а дальше что вы с ней делать будете? Ну разве что в базу положить. В контрол её начнете выводить - дык она опять в Ansi превратится, и хорошо, если с той же LCID, а иначе швед увидит в откомпилированной в Windows с русской локалью программе иероглифы, а никакой не юникод. В файл ее записать? так функции Delphi опять-таки под ANSI заточены, и тут уже соображать надо, как ее в файл записать...
так что вот так.
← →
Golleador (2003-10-27 23:59) [4]Вот мне и надо с файла считать ANSI, а в другой файл записать в Unicode.
Вот я попробовал, но ничего не получилось.
procedure TForm1.Button1Click(Sender: TObject);
var
infile, outfile: TextFile;
x: string;
c: widestring ;
begin
assignfile(infile, "D:\1.TXT");
assignfile(outfile, "D:\11.TXT");
reset(infile);
rewrite(outfile);
while not eof(infile) do
begin
readln(infile, x);
c:=WideString(x);
writeln(outfile, c);
end;
closefile(infile);
closefile(outfile);
end;
И как мне быть...
← →
Ломброзо (2003-10-28 00:15) [5]Не очень опитмально, но примерно так.
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
var F: TextFile;
UF: File of WideChar;
aString: string;
uString: WideString;
uChar : WideChar;
i : integer;
uBOM : WideChar;
const BOM = $FEFF;
begin
uBOM := WideChar(BOM);
AssignFile(F, "C:\a.txt");
AssignFile(UF, "C:\ua.txt");
Reset(F);
Rewrite(UF);
Write(UF, uBOM );
while not EOF(F) do
begin
Readln(F, aString);
uString := aString;
for i := 1 to Length(uString) do
begin
uChar := uString[i];
Write(UF, uChar);
end;
end;
CloseFile(UF);
CloseFile(F);
Readln;
end.
← →
Ломброзо (2003-10-28 00:19) [6]Лучше как-нить BlockRead/BlockWrite пришить, цикл по каждому символу - неоптимально.
BOM - это сигнатура юникодового файла.
← →
Golleador (2003-10-28 00:25) [7]Все действительно работает. Только вот кроме одного. Когда идет в файле новая строка, при кодировании просто её нет. А когда конвертируешь снова в ANSI, то перехода на новую строку нет. Просто получаются все слова слитно. Вот в этом беда.
← →
Ломброзо (2003-10-28 00:40) [8]уже все разжевал вроде ))
var
...
uBOM : WideChar;
uCr : WideChar;
uLf : WideChar;
const BOM = $FEFF;
const CR = $000D;
const LF = $000A;
begin
uBOM := WideChar(BOM);
uCr := WideChar(CR);
uLf := WideChar(LF);
...
for i := 1 to Length(uString) do
begin
uChar := uString[i];
Write(UF, uChar);
end;
Write(UF, uCr, uLf);
← →
Golleador (2003-10-28 00:44) [9]Все получилось.
Большое спасибо. Большое спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c