Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Что-то я малость потерялся. Если выводить в лоб, через обычный writeln то выводятся кракозябры. Там какая кодировка-то нужна? ДОСовская чтоли?!? Какие-то "преданья старины глубокой" прямо...
21 июл 09, 13:19    [7439966]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
OEM

--
http://www.podgoretsky.com
21 июл 09, 13:21    [7439976]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 10:19:55 GMT:

Kotъ-Begemotъ
KB> Что-то я малость потерялся. Если выводить в лоб,
KB> через обычный writeln то выводятся кракозябры.
KB> Там какая кодировка-то нужна? ДОСовская чтоли?!?
любая.
по дефолту ОЕМ.
выставь нужную тебе.
SetConsoleOutputCP()

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 13:55    [7440225]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Мимопроходящий
любая.
по дефолту ОЕМ.
выставь нужную тебе.
SetConsoleOutputCP()


То есть это не затронет настроек системы? Просто для вывода в консоль ИЗ МОЕГО приложения будет использована нужная СР?
21 июл 09, 14:12    [7440356]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Это затрагивает, только единственный поток.

--
http://www.podgoretsky.com
21 июл 09, 14:16    [7440379]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 11:12:49 GMT:

Kotъ-Begemotъ
KB> для вывода в консоль ИЗ МОЕГО приложения будет использована нужная СР?
да

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 14:17    [7440391]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Спасибо, даже не знал о подобной возможности! Только одна засада, надо по идее проверять ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage на предмет установленности нужной СР? Правильно я понимаю?
21 июл 09, 14:20    [7440420]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 11:20:28 GMT:

Kotъ-Begemotъ
Только одна засада, надо по идее проверять ключ
нафуя?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 14:21    [7440433]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Мимопроходящий

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 11:20:28 GMT:

Kotъ-Begemotъ
Только одна засада, надо по идее проверять ключ
нафуя?

--
With best regards, Мимопроходящий.


А вдруг нужная мне СР 1251 вообще не установлена?
21 июл 09, 14:23    [7440442]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Так проверяй или не проверяй - все одно, будут абракадабры

--
http://www.podgoretsky.com
21 июл 09, 14:24    [7440458]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 11:23:17 GMT:

Kotъ-Begemotъ
KB> А вдруг нужная мне СР 1251 вообще не установлена?
функция вернёт ошибку.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 14:30    [7440494]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Тогда не понял чего-то

var
        Error: Integer;
         yy: Boolean;

begin

  Application.Initialize;
  Error := GetConsoleOutputCP;
  ShowMessage(IntToStr(Error)); // Выводит "866"

  yy := SetConsoleOutputCP(1251);
  if yy then
   ShowMessage('Успешно!')
   else
    ShowMessage('Облом!'); // Выводит "Успешно!"

  if (ParamCount < 1) then
  begin
    WriteLn('Не указан ключ реестра!'); // Выводит кракозябры :(
    Exit;
  end;
21 июл 09, 14:34    [7440524]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Tue, 21 Jul 09 11:34:10 GMT:

Kotъ-Begemotъ
KB> Выводит кракозябры :(
бо шрифт!

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 14:54    [7440687]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381
ну чо там, кот, решил вопрос со шрифтами?
21 июл 09, 16:28    [7441364]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
ASVShade
Member

Откуда:
Сообщений: 7
Куча ответов и ниодного едльного))))

function rus (mes: string) : string;
var
  i                                     : integer;
begin
  for i := 1 to length (mes) do
    case mes[i] of
      'А'..'П', 'а'..'п', 'Р'..'Я': mes[i] := chr (ord (mes[i]) -64) ;
      'р'..'я': mes[i] := chr (ord (mes[i]) -16) ;
    end;
  rus := mes;
end;


Сообщение было отредактировано: 21 июл 09, 19:26
21 июл 09, 17:00    [7441529]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4574
Я может чего не понял... но обычно на консолях перед вызовом "приложения" выполняют:
chcp
21 июл 09, 17:07    [7441566]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Альт!
You wrote on Tue, 21 Jul 09 14:07:16 GMT:

Альт
А> Я может чего не понял... но обычно на консолях перед вызовом "приложения" выполняют:
А> chcp
консоль, это не совсем то что ты думаешь.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 17:09    [7441577]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Asm64D
Member

Откуда: [Краснодар] http://cluboflosers13.livejournal.com/
Сообщений: 6476
Тему не читал, по сабжу
Русификация консольных приложений в Delphi
Еще занятное
Почему вместо русских букв в консольном приложении выводится мусор?

И усе пошел дальше праздновать 22-летие.
______________________________________________________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
21 июл 09, 19:01    [7442169]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Asm64D!
You wrote on Tue, 21 Jul 09 16:01:23 GMT:

Asm64D
A> Русификация консольных приложений в Delphi
оченЬ, очень спорное решение...

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

21 июл 09, 19:28    [7442240]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Kotъ-Begemotъ
Member

Откуда: Где-то рядом...
Сообщений: 4005
Мимопроходящий
ну чо там, кот, решил вопрос со шрифтами?

Да пока остановился на том, что выдрал из DBTables функцию-обёртку над CharToOem и перекодирую мессаги выводимые в консоль. Это работает исправно. Надо будет еще ссылки приведённые почитать...

function StrToOem(const AnsiStr: string): string;
begin
  SetLength(Result, Length(AnsiStr));
  if Length(Result) > 0 then
    CharToOem(PChar(AnsiStr), PChar(Result));
end;
22 июл 09, 11:56    [7444339]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
zirra
Member

Откуда: Ленинград
Сообщений: 4467

On Wed, 22 Jul 2009 12:56:38 +0400, Kotъ-Begemotъ <nospam@sql.ru> wrote:

> Автор: Kotъ-Begemotъ

Юрич, чтой-то я тебя как-то перестал понимать...
У меня нижеприведённый код отрабатывает нормально...
+ Вот такой код
uses
   Windows,
   SysUtils;

{$APPTYPE CONSOLE}

var
   Error: Integer;
   yy: Boolean;

begin
   Error := GetConsoleOutputCP;
   Writeln('IntToStr(Error) = ', IntToStr(Error)); // Выводит "866"

   yy := SetConsoleOutputCP(1251);
   if yy then
     Writeln('Успешно!')
   else
     Writeln('Облом!'); // Выводит "Успешно!"

   if (ParamCount < 1) then
   begin
     Writeln('Не указан ключ реестра!'); // НЕ ВЫВОДИТ КРАКОЗЯБРЫ :(
     Exit;
   end;
end.

Posted via ActualForum NNTP Server 1.4

22 июл 09, 12:06    [7444401]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Это у тебя, а у него возможно
Мимопроходящий
бо шрифт!


--
http://www.podgoretsky.com
22 июл 09, 12:15    [7444461]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32381

Hello, Kotъ-Begemotъ!
You wrote on Wed, 22 Jul 09 08:56:38 GMT:

Kotъ-Begemotъ
KB> Да пока остановился на том, что выдрал из DBTables функцию-обёртку
KB> над CharToOem и перекодирую мессаги выводимые в консоль.
ну, дело твоё.
я лично пользую нативные кодировки с юникодными шрифтами.
и вот со шрифтами там есть ньюанец. потому и спросил.
Kotъ-Begemotъ
KB> Надо будет еще ссылки приведённые почитать...
оно того не стоит.
первая сцылка вообще пипец, а вторая пользует тот же подход что и ты.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

22 июл 09, 12:15    [7444464]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
zirra
Member

Откуда: Ленинград
Сообщений: 4467
...или даже вот так вот (см.вложение, т.к. символы могут попортится)...

К сообщению приложен файл (1.dpr - 642bytes) cкачать
22 июл 09, 12:30    [7444573]     Ответить | Цитировать Сообщить модератору
 Re: Вывод русского текста в консольном приложении  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
автор
а вторая пользует тот же подход что и ты.

Не совсем так, в статье подход правильный, если абстрагироваться от Си, то там будет работать и для Юникод и для АНСИ, а у автора не совсем так, работать будет, но с лишними преобразованиями, в зависимости от версии Дельфи или вообще не будет работать.
Тут нужен отказ от функции и/или переписывание заголовка функции. Нюансов много.

--
http://www.podgoretsky.com
22 июл 09, 12:32    [7444589]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Delphi Ответить