Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

почему в консольном приложении русские буквы выводятся абракадабр


lavgirls ©   (2008-07-27 22:22:00) 

Вопрос такой почему в консольном приложении русские буквы выводятся абракадаброй. на моем бывшем компьютере помоему все нормально было


Anatoly Podgoretsky   (2008-07-28 15:40:00) [1]

> Тын-Дын  (28.07.2008 15:35:19)  [19]

Ну еще бы не помнить такое, когда неприятно было, что данные портились непонятно почему :-)


Тын-Дын   (2008-07-28 15:35:00) [2]


> Anatoly Podgoretsky ©   (28.07.08 15:20) [17]
> > Тын-Дын  (28.07.2008 14:47:16)  [16]Зато я помню, я все
> помню.


Вот память!


Anatoly Podgoretsky   (2008-07-28 15:22:00) [3]

Тонкостей только две.

1. побочное изменение оригинал
2. и AV при нулевой длине.


Anatoly Podgoretsky   (2008-07-28 15:20:00) [4]

> Тын-Дын  (28.07.2008 14:47:16)  [16]

Зато я помню, я все помню.


Тын-Дын   (2008-07-28 14:47:00) [5]


> Anatoly Podgoretsky ©   (28.07.08 14:33) [15]


Может быть. И сам же забыл давно.


Anatoly Podgoretsky   (2008-07-28 14:33:00) [6]

> Тын-Дын  (28.07.2008 14:32:14)  [14]

Кажется это ты ткнул в этот побочный эффект несколько лет назад?


Тын-Дын   (2008-07-28 14:32:00) [7]


> Loginov Dmitry ©   (28.07.08 13:38) [13]
> > Пока не вижу, что правильнее-)UniqueString(S) сделай


> Anatoly Podgoretsky ©   (28.07.08 01:07) [7]


Теперь вижу-)
Надо же, как можно наткнуться неожиданно на грабли.


Loginov Dmitry   (2008-07-28 13:38:00) [8]


> Пока не вижу, что правильнее-)


UniqueString(S) сделай


Slym   (2008-07-28 10:37:00) [9]

brother ©   (28.07.08 10:26) [11]
при частоте в гигагерцы длительность операции в секундах не измеряют...
в тиках посчитай... 1. латентность не нулевая, 2. на многоCPU системах может блокироваться память


brother   (2008-07-28 10:26:00) [10]

> Работа с памятью не такая быстраю как многим кажется

даже если текст будет метровый, это будет махом! поверь ;)


Slym   (2008-07-28 10:25:00) [11]

вариант Тын-Дын ©   (28.07.08 0:41) [5]на псевдокоде:
Выделить память под Result
Скопировать в Result содержимое S
Перекодировать из Result в Result

вариант Amoeba ©   (28.07.08 1:01) [6]на псевдокоде:
Выделить память под Result
Перекодировать из S в Result

Как видим на 1 операцию меньше, а при "увиличении" на 1 операцию ЧТЕНИЯ памяти и 1 операцию ЗАПИСИ в память. Работа с памятью не такая быстраю как многим кажется


Тын-Дын   (2008-07-28 09:24:00) [12]


> Anatoly Podgoretsky ©   (28.07.08 01:07) [7]
> Тын-Дын ©   (28.07.08 00:41) [5] Побочный эффект - изменение
> S


У меня не меняется.

function W2D(const s: String): String;
begin
 Result := s;
 if Result<>'' then CharToOem(PChar(Result),PChar(Result));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 s,s1: String;
begin
 s := 'абвг';
 s1 := W2D(s);
 Memo1.Lines.Add(s);
 Memo1.Lines.Add(s1);
end;



> Loginov Dmitry ©   (28.07.08 08:03) [8]
> > тьфу, не то написал.[4] правильнее было :))


Пока не вижу, что правильнее-)


Loginov Dmitry   (2008-07-28 08:03:00) [13]

> тьфу, не то написал.


[4] правильнее было :))


Anatoly Podgoretsky   (2008-07-28 01:07:00) [14]

Тын-Дын ©   (28.07.08 00:41) [5]
Побочный эффект - изменение S


Amoeba   (2008-07-28 01:01:00) [15]

Код из RxLib:
function StrToOem(const AnsiStr: string): string;
begin
 SetLength(Result, Length(AnsiStr));
 if Length(Result) > 0 then
   CharToOemBuff(PChar(AnsiStr), PChar(Result), Length(Result));
end;


Тын-Дын   (2008-07-28 00:41:00) [16]

тьфу, не то написал.

function W2D(const s: String): String;
begin
  Result := s;
  if Result<>'' then CharToOem(PChar(Result),PChar(Result));
end;


Тын-Дын   (2008-07-27 23:54:00) [17]


> {RASkov} ©   (27.07.08 22:27) [2]


Я бы немного упростил:
function W2D(const s: String): String;
begin
 Result := s;
 if Result='' then Exit;
 CharToOem(@Result[1],@Result[1]);
end;


lavgirls   (2008-07-27 22:35:00) [18]

спасибо


{RASkov}   (2008-07-27 22:27:00) [19]

program Project1;
{$APPTYPE CONSOLE}
uses Windows;

function StrToRus(const AStr: String): String;
begin
 Result:='';
 if Length(AStr)>0 then begin
  SetLength(Result, Length(AStr));
  CharToOem(PChar(AStr), PChar(Result));
 end;
end;

begin
 Writeln(StrToRus('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧЩШЫЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчщшъ ыьэюя'));
 Readln;
end.


{RASkov}   (2008-07-27 22:25:00) [20]

> [0] lavgirls   (27.07.08 22:22)

другая кодовая страница


Наверх

Титульная страница Поиск, карта сайта Написать письмо