Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Нужна помощь с переводом в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-41227
AndriyS
2003-11-01 14:15
2003.11.13
Помогите с StringGrid


7-42205
Павлов Александр
2003-08-25 14:44
2003.11.13
Как определить из MS-DOS вендора и модель чипсета?


1-41154
Ivolg
2003-11-03 12:01
2003.11.13
Звуки из динамика


1-41204
Agent[007]
2003-11-01 22:07
2003.11.13
Case ... of <a>:<b>; end;


1-41396
alexis
2003-10-29 15:44
2003.11.13
создание компонента во время работы приложения.