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

Вниз

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

 
lavgirls   (2008-07-27 22:22) [0]

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


 
{RASkov} ©   (2008-07-27 22:25) [1]

> [0] lavgirls   (27.07.08 22:22)

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


 
{RASkov} ©   (2008-07-27 22:27) [2]

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.


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

спасибо


 
Тын-Дын ©   (2008-07-27 23:54) [4]


> {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;


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

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

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


 
Amoeba ©   (2008-07-28 01:01) [6]

Код из 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;


 
Anatoly Podgoretsky ©   (2008-07-28 01:07) [7]

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


 
Loginov Dmitry ©   (2008-07-28 08:03) [8]

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


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


 
Тын-Дын ©   (2008-07-28 09:24) [9]


> 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] правильнее было :))


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


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

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

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

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


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

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

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


 
Slym ©   (2008-07-28 10:37) [12]

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


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


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


UniqueString(S) сделай


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


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


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


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


 
Anatoly Podgoretsky ©   (2008-07-28 14:33) [15]

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

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


 
Тын-Дын ©   (2008-07-28 14:47) [16]


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


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


 
Anatoly Podgoretsky ©   (2008-07-28 15:20) [17]

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

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


 
Anatoly Podgoretsky ©   (2008-07-28 15:22) [18]

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

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


 
Тын-Дын ©   (2008-07-28 15:35) [19]


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


Вот память!


 
Anatoly Podgoretsky ©   (2008-07-28 15:40) [20]

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.09.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1215903057
ply
2008-07-13 02:50
2008.09.07
увеличение времени исполнения запросов к БД


3-1205487538
Bless
2008-03-14 12:38
2008.09.07
ADO 2.8 в MSDN и Delphi 7 - две большие разницы?


4-1196072040
mabia
2007-11-26 13:14
2008.09.07
Доступ к папке


15-1216036018
wl
2008-07-14 15:46
2008.09.07
Win XP x64 + поддержка иероглифов


2-1217251593
alex-drob
2008-07-28 17:26
2008.09.07
Выборка из таблицы по дате