Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Русские буквы в консоле, как сделать ? 
V
    Опции темы
Trotter
Дата 16.4.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



Что нужно сделать для того чтобы у меня в моих консольных приложениях отображались Русские буквы ?
Тоесть вывод на экран текст Русскими буквами


PM MAIL ICQ   Вверх
zkv
Дата 16.4.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Trotter @  16.4.2007,  23:37 Найти цитируемый пост)
Что нужно сделать для того чтобы у меня в моих консольных приложениях отображались Русские буквы ?
Тоесть вывод на экран текст Русскими буквами

посмотреть по ссылкам внизу страницы  smile 
PM MAIL   Вверх
sergejzr
Дата 16.4.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Вот здесь написано: http://forum.vingrad.ru/topic-146516/unread-1.html#look


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
archimed7592
Дата 16.4.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



ничего не нужно делать...
хоть бы компилятор указал...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
dizzy1984
Дата 17.4.2007, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Как делаю я.

// Выводит на консоль и преобразует в дос-кодировку
void WriteOut(LPCSTR str1) {
    CString str = str1;
    str.AnsiToOem();
    printf("%s",str);
};

Есть апишная функция AnsiToOem. где именно она распологается не знаю, но это должно быть видно через stdafx.h
PM MAIL   Вверх
nerezus
Дата 17.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Trotter, а нефиг юзать разные кодировки в редакторе и в консоли.
Юзай везде либо 1251, либо 866, либо любую другую, но ОДИНАКОВУЮ.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Redstuff
Дата 17.4.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Вот ф-ия, если памать не изменяет работает для 3х различных компиляторов работает точно
Код

// ConvertCodepage
// Служебная функция, необходимая для вывода текста
// на русском языке в консольном приложении.
// Входные данные:
// Указатель на преобразуемую ANSI-строку
// Выходные данные:
// Строка в OEM-кодировке
string ConvertCodepage(const char *text){
char *buffer=new char[strlen(text)+1];
if (NULL == buffer)
return "";
AnsiToOem(text,buffer);
string result(buffer);
delete[] buffer;
return result;
}



--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Trotter
Дата 17.4.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



паскоку я в С++ не понимаю вообще вот код чё куда надо добавить из выше сказоного ?
Код

#include <iostream.h>
#include <conio.h>
int main()
{
cout<<"Привет";
getch();
}


PM MAIL ICQ   Вверх
_stranger_
Дата 17.4.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



попробуй так
Код


#include <iostream>
#include <locale>
int main()
{
   std::locale L(std::locale::locale());
   std::locale::global(std::locale("rus"));
   std::cout<<"Привет" << std::endl;
   std::locale::global(L);
}


PM MAIL   Вверх
dizzy1984
Дата 17.4.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



либо так

Код

#include <iostream.h>
#include <conio.h>
int main()
{
CString sHellow = "Привет";
sHellow.AnsiToOem();
cout<<sHellow;
getch();
}


PM MAIL   Вверх
BigHeart
Дата 17.4.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 17.3.2007

Репутация: нет
Всего: нет



попробуй так ( если студия - поможет )
Код

{
char str[10] = {'п','р','и','в','е','т','\0'};
char str_1[10];
CharToOem(str,str_1);//если так выдаёт ошибку
                                    //попробуй CharToOemA(str,str_1);
std::cout << str_1;
}

PM MAIL   Вверх
archimed7592
Дата 17.4.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Trotter, думаю, что проблема у тебя в том, что в настройках проекта стоит Charset Unicode, а не Charset Not set (как должно быть для вывода русских букв)


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Redstuff
Дата 17.4.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Trotter, 
Вот рабочий код для визуалки, библиотеки обязательные
Код

#include "stdafx.h" // из визуалки
#include "conio.h"
#include "iostream"
#include "string"
#include <windows.h>

// ConvertCodepage
// Служебная функция, необходимая для вывода текста
// на русском языке в консольном приложении.
// Входные данные:
// Указатель на преобразуемую ANSI-строку
// Выходные данные:
// Строка в OEM-кодировке
string ConvertCodepage(const char *text){
char *buffer=new char[strlen(text)+1];
if (NULL == buffer)
return "";
AnsiToOem(text,buffer);
string result(buffer);
delete[] buffer;
return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
cout<<ConvertCodepage("Привет");
getch();
}


Это сообщение отредактировал(а) Redstuff - 17.4.2007, 17:11


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
nerezus
Дата 17.4.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Нифига себе сколько гемора. И это вместо того, чтобы просто юзать одинаковые кодировки =)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
JackYF
Дата 17.4.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(nerezus @  17.4.2007,  17:35 Найти цитируемый пост)
И это вместо того, чтобы просто юзать одинаковые кодировки =) 

Или локали.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Trotter
Дата 17.4.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



_stranger_, твой способ не прокатил :(

dizzy1984, в тваём коде вот ветой строке говарит ошибка вот тута CString sHellow = "Привет"; а точнее перед знаком =
говарит следующие:
[C++ Error] Unit1.cpp(5): E2451 Undefined symbol 'CString'
[C++ Error] Unit1.cpp(5): E2379 Statement missing ;
[C++ Error] Unit1.cpp(6): E2451 Undefined symbol 'sHellow'


Redstuff, в тваём коде говарит следующие 
[C++ Error] Unit1.cpp(1): E2209 Unable to open include file 'stdafx.h'
[C++ Error] Unit1.cpp(3): E2209 Unable to open include file 'iostream'
[C++ Error] Unit1.cpp(4): E2209 Unable to open include file 'string'
[C++ Error] Unit1.cpp(14): E2141 Declaration syntax error


PM MAIL ICQ   Вверх
archimed7592
Дата 17.4.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Trotter, в твАём варианте нужно поправить настройки проекта... ап.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Trotter
Дата 18.4.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



archimed7592, а как, не подскажеш ? 
PM MAIL ICQ   Вверх
dizzy1984
Дата 18.4.2007, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Trotter, какой компилятор вы используете?
Мои примеры компилируются и запускаются на VC++8.0
С поправкой cout<<(LPCSTR)sHellow на VC++6.0

[C++ Error] Unit1.cpp(1): E2209 Unable to open include file 'stdafx.h'
Очень сильно смахивает на bc++ builder.

Для него я могу разве посоветовать только

Код

char source [] = "Привет";
char dest [sizeof(source)];
AnsiToOem(source,dest);
cout<<dest;
getch();


Вам же предстоит написать на основе этого функцию, которая работает с произвольной длиной строки.

Это сообщение отредактировал(а) dizzy1984 - 18.4.2007, 06:08
PM MAIL   Вверх
_stranger_
Дата 18.4.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



Цитата

   _stranger_, твой способ не прокатил :(

Trotter, что говорит компилятор??? кстати а какой компилятор используете?
 еще попробуйте
Код

   std::locale::global(std::locale("Russian_Russia.1251"));
   // или std::locale::global(std::locale(".1251"));
 


PM MAIL   Вверх
Redstuff
Дата 18.4.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Trotter, 
Цитата

[C++ Error] Unit1.cpp(1): E2209 Unable to open include file 'stdafx.h'
[C++ Error] Unit1.cpp(3): E2209 Unable to open include file 'iostream'
[C++ Error] Unit1.cpp(4): E2209 Unable to open include file 'string'


'stdafx.h' - в визулке, если ты не в ней, то эта либа вообще не нужна.
Попробуй добавить .h на конце:
Код

#include "iostream.h";
#include "string.h";


Это сообщение отредактировал(а) Redstuff - 18.4.2007, 16:03


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Trotter
Дата 18.4.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



_stranger_, не прокатило, запускается но отображаются всёравно эроглефы
dizzy1984, у меня C++Builder 6 попробовал твой код не прокатило (хотя незнаю куда надо было его добовлять) вот такая вот ошибка  [C++ Error] Unit1.cpp(7): E2268 Call to undefined function 'AnsiToOem'

Redstuff, "h" всегда ставлю в конце..
Мужики если мона то давайте мне полный код а не отрывки, а то я из книжки всего 80ст прочитал и незнаю чё куда надо писать :(
PM MAIL ICQ   Вверх
dizzy1984
Дата 19.4.2007, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Запускаю BCB6.0
Иду File->New->Other->Console Wizard.
Убеждаюсь в присутствии SourceType C++, Use VCL, Console Application.
Жму OK.
Добавляю в удобное для тебя место функцию

Код

AnsiString ConvToOem(char * szStr)
{
        char * szDest = new char [strlen(szStr) + 1];
        AnsiString ret;
        AnsiToOem(szStr, szDest);
        ret = szDest;
        delete [] szDest;
        return ret;
}


Перед директивой #pragma hdrstop подключаю следующие хидеры
#include <iostream.h>
#include <conio.h>

Пишу тестовый код в main
Код

cout<<ConvToOem("Привет").c_str();
getch();


Моя реалиазция работает через winapi функцию AnsiToOem.
Не уверен, но думаю что в vcl должен быть класс который умеет это сам.
Еще можно использовать wprintf и, похоже, cout. Но это уже другая история

PM MAIL   Вверх
Trotter
Дата 21.4.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



dizzy1984, усё работает нармально, СПАСИБО !
PM MAIL ICQ   Вверх
JackYF
Дата 22.4.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dizzy1984 @  19.4.2007,  05:57 Найти цитируемый пост)
Убеждаюсь в присутствии SourceType C++, Use VCL, Console Application.


 smile  Нет, ну использовать VCL в консольном приложении... smile даже не придумал, как это можно назвать...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nerezus
Дата 22.4.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



JackYF, а это плохо?

Кстати, я наверное неправильно понимаю само понятие VCL, если оно неверное, то поправьте меня: компонент VCL - это класс с некоторым описанием, позволяющим поместить его на панель инструментов, добавляющимся в приложение через эту панель и позволяющим настроить свойства/события через специальное окно в IDE?

Если это так, то тогда что плохого в ООП?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
JackYF
Дата 22.4.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(nerezus @  22.4.2007,  09:17 Найти цитируемый пост)
Если это так, то тогда что плохого в ООП? 

В ООП - пожалуйста, нет ничего плохого. Никто не удивится классам в консольном приложении.
А вот VCL был разработан для Rapid Application Delevelopment в визуальной среде. Использовать его в консольном приложении ради, допустим, CharToOem - для меня странно.

Кроме того, если не ошибаюсь, то сама поддержка VCL потребует библиотек, которые придется либо таскать с собой, либо статически линковать. Если, конечно, оно только для дома, то и ладно. Но сам подход - использовать VCL в консольном приложении - мне претит. Это все имхо, конечно. Кто несогласен - особо спорить не буду. Кому-то удобнее. Мне - нет.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nerezus
Дата 22.4.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

Кроме того, если не ошибаюсь, то сама поддержка VCL потребует библиотек, которые придется либо таскать с собой, либо статически линковать. 
 А это плохо? С каких пор стали играть роль лишние сотни кило?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
dizzy1984
Дата 22.4.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(JackYF @  22.4.2007,  00:04 Найти цитируемый пост)
даже не придумал, как это можно назвать

Зачем так грубо? Сами вы ведь не потрудились предоставить хоть какое-то решение.

Цитата(JackYF @  22.4.2007,  12:11 Найти цитируемый пост)
 VCL был разработан для Rapid Application Delevelopment в визуальной среде. Использовать его в консольном приложении ради, допустим, CharToOem - для меня странно

VCL содержит обертки для win32api функций, их использовать удобнее нежели LoadLibrary или линковку с соответствующим *.lib файлом. Если бы я провернул такой трюк, мой пример слат бы менее понятным. Кроме того, все зависит от сложности проекта, ведь не всем нужно изобретать велосипеды.
Цитата(JackYF @  22.4.2007,  12:11 Найти цитируемый пост)
 VCL потребует библиотек, которые придется либо таскать с собой, либо статически линковать

Ввиду того что линковаться будет только то, что использует программа перерасход должен быть небольшой. Ну а динамически - когда я пишу программу на mfc я представляю себе что за библиотеки она использует... не вижу здесь проблемы.

PM MAIL   Вверх
JackYF
Дата 23.4.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dizzy1984 @  22.4.2007,  16:40 Найти цитируемый пост)
Зачем так грубо?

Я как раз хотел наименее грубо, но не получилось.

Цитата(dizzy1984 @  22.4.2007,  16:40 Найти цитируемый пост)
Сами вы 

Хм... ну можно и на ты, если хотите.


Цитата(dizzy1984 @  22.4.2007,  16:40 Найти цитируемый пост)
Кроме того, все зависит от сложности проекта

Вряд ли хоть сколько-либо сущность, называемая проектам, будет использовать вывод в консоль русских букв. Исключение - лабы в универах.
Имхо, ибо тут тоже будут со мной спорить.


Цитата(dizzy1984 @  22.4.2007,  16:40 Найти цитируемый пост)
предоставить хоть какое-то решение.

По самому вопросу была уже далеко не одна тема. Если воспользоваться поиском, то можно найти все решения, предоставленные здесь + еще некоторые. Копипастить я не намерен, ничего нового от себя не добавлю. Могу разве что предоставить прямую ссылки на более ранние темы по этому вопросу, если нужно.


Цитата(dizzy1984 @  22.4.2007,  16:40 Найти цитируемый пост)
пишу программу на mfc

Ну вряд ли, когда вы пишете проект, вы из всего многообразия mfc используете класс CString? В данном случае именно так - VCL подключается ради одной-единственной функции.

Цитата(nerezus @  22.4.2007,  12:22 Найти цитируемый пост)
А это плохо? С каких пор стали играть роль лишние сотни кило? 

Сотни кило библиотек, которые реально используются в программе - это нормально и от этого никуда не деться. А вот подключать сотни кило ради использования из них нескольких сотен байт бинарного кода - не очень, имхо. Тем более, что это не супер сложный код, а легко(имхо) воспроизводимый.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizzy1984
Дата 24.4.2007, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(JackYF @  23.4.2007,  16:30 Найти цитируемый пост)
Хм... ну можно и на ты, если хотите.

Хочу
 smile 

Цитата(JackYF @  23.4.2007,  16:30 Найти цитируемый пост)
 как раз хотел наименее грубо, но не получилось.

Неправильно тебя понял smile 
Было правило мерфи я приведу его не дословно но суть сводилась к тому, что даже если некоторый человек скажет нечно в такой формулировке, что понять его по-другому кроме как правильно станет невозможно, обязательно найдется другой человек, который поймет его не правильно.

Цитата(JackYF @  23.4.2007,  16:30 Найти цитируемый пост)
Ну вряд ли, когда вы пишете проект, вы из всего многообразия mfc используете класс CString?

Не поверишь, я это пару раз проворачивал. Из всех классов для работы со строками CString для меня имеет лидирующие позиции.

Чтобы посмотреть реальную разницу я создал 2 проекта.
1-н свой выше
2-й без vcl, но с #include <windows.h>
У меня получилось 
1 7168 байт
2 5632 байт
и разница 1536
Выходит ненужные для меня действия породили лишних 1.5 кб. smile 
Даже если бы я писал вирус или нечто где критично количество килобайт, я мог бы закрыть на ето глаза.

А насчет подключение mfc ради одного CString. Программы с динамической линковкой стали почти вдвое короче прежних - на винапи. Я даже выиграл от егото  smile 

PM MAIL   Вверх
dumb
Дата 24.4.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(dizzy1984 @  24.4.2007,  06:40 Найти цитируемый пост)
У меня получилось 
1 7168 байт
2 5632 байт

чтобы ощутить масштаб, включи стат.компоновку. smile

а вообще, вариантов использования vcl в консольной программе - предостаточно. например, какой-нибудь сервер... можно, конечно, "зарисовать" все на сокетах и odbc, но тогда уж можно и asm "поюзать"... smile
PM MAIL   Вверх
Любитель
Дата 24.4.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Вообще не понимаю вот этого - постоянно конвертить в дос-кодировку...

Наиболее коректен способ, который представил _stranger_. Единственное в винде щёлкните предварительно правым кликом по заголовку любой консоли и выберите "Умолчания". И на вкладке шрифтов ставим "Lucidia Console". OK. Теперь радуемся жизни.

Стандартная консоль в винде извратная - это факт, но извращаться так...


--------------------
PM MAIL ICQ Skype   Вверх
nerezus
Дата 24.4.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Повторюсь третий раз: в редакторе выбрать кодировку cp866 религия не позволяет?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
dizzy1984
Дата 24.4.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(nerezus @  24.4.2007,  11:13 Найти цитируемый пост)
Повторюсь третий раз: в редакторе выбрать кодировку cp866 религия не позволяет?

Нет бога кроме аллаха и магомет его пророк

Цитата

чтобы ощутить масштаб, включи стат.компоновку

А как это сделать не подскажешь?

Это сообщение отредактировал(а) dizzy1984 - 24.4.2007, 13:22
PM MAIL   Вверх
JackYF
Дата 24.4.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dumb @  24.4.2007,  09:32 Найти цитируемый пост)
ариантов использования vcl в консольной программе - предостаточно. например, какой-нибудь сервер...

Сервер на VCL? Убиться об стену и не встать...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dumb
Дата 25.4.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(dizzy1984 @  24.4.2007,  13:01 Найти цитируемый пост)
А как это сделать не подскажешь?

ctrl-shift-f11, (linker, -use dynamic rtl), (packages, -build with runtime packages)

Цитата(JackYF @  24.4.2007,  16:47 Найти цитируемый пост)
Сервер на VCL? Убиться об стену и не встать...

то, что к vcl ты относишься предвзято - уже понятно. неплохо бы и аргументировать свою точку зрения...
PM MAIL   Вверх
JackYF
Дата 25.4.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dumb @  25.4.2007,  12:47 Найти цитируемый пост)
vcl ты относишься предвзято - уже понятно

Я на нем писал не один год, и мнение о нем составил. Для RAD-разработки - оно самое то, я обеими руками за.


Цитата(dumb @  25.4.2007,  12:47 Найти цитируемый пост)
Сервер на VCL

VCL - Visual Components Library. Спрашивается, зачем серверу визуальные компоненты? Когда он должен напрямую с сокетами работать и выдавать данные? И работать быстро. Чем-чем, а скоростью VCL не страдает.
Ведь недаром подавляющее большинство серверов (как программ) на Линухах работают - никаких там а-ля VCL нету.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dumb
Дата 25.4.2007, 14:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(JackYF @  25.4.2007,  14:18 Найти цитируемый пост)
VCL - Visual Components Library. Спрашивается, зачем серверу визуальные компоненты? Когда он должен напрямую с сокетами работать и выдавать данные? И работать быстро. Чем-чем, а скоростью VCL не страдает.

создается впечатление, что ты немного неправильно понимаешь слово visual в этой аббревиатуре. компоненты для работы с сокетами, БД - тоже являются частью(или наследниками) VCL, и их грамотное употребление не сильно оказывает влияния на скорость. во всяком случае, гораздо меньше, чем свои изобретения на сокетах в условиях недостатка опыта/времени.
так что всему свое место. и VCL - не худшее решение такого рода вопросов.
PM MAIL   Вверх
Nikolyan
Дата 25.4.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.4.2007
Где: Нижний Новгород

Репутация: нет
Всего: нет



Вот прога, юзайте, если ещё кому надо.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  fconvert.7z 7,66 Kb
PM MAIL WWW ICQ   Вверх
JackYF
Дата 25.4.2007, 16:39 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dumb @  25.4.2007,  14:55 Найти цитируемый пост)
их грамотное употребление не сильно оказывает влияния на скорость

Цитата(dumb @  25.4.2007,  14:55 Найти цитируемый пост)
чем свои изобретения на сокетах в условиях недостатка опыта/времени.


Да, соглашусь. Погорячился. 

Цитата(dumb @  25.4.2007,  14:55 Найти цитируемый пост)
VCL - не худшее решение такого рода вопросов. 

При таких условиях согласен. Правда, имхо, и не лучшее.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizzy1984
Дата 26.4.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Результаты теста со статической линковкой.
1-н свой выше
2-й без vcl, но с #include <windows.h>
У меня получилось 
1 132096 байт
2 5632 байт
и разница 126,4 кб для тов. AnsiString.

В этом случае - да, нехорошо.
PM MAIL   Вверх
Jaim_ua
Дата 26.4.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Скопируй и ВСЕ

ostream &operator<<(ostream &out, char* strWin)
{
    char strDos[4096];
    CharToOem(strWin,strDos);
    out.write(strDos, strlen(strDos));
    return out;
}


cout<<”Привет”;

PM MAIL   Вверх
Любитель
Дата 28.4.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(nerezus @  24.4.2007,  11:13 Найти цитируемый пост)
Повторюсь третий раз: в редакторе выбрать кодировку cp866 религия не позволяет?


Эээ. Лишние щелчки! В той же студии я по крайней мере не знаю как поставить CP866 дефолтьным энкодингом. А каждый раз указывать - неудобно smile Это первое. Второе - насчёт аллаха и консоли. Я не согласен, что нет консоли кроме cmd (даже не cmd, наверно, а просто стандартные возможности винды для приложений с консольной сабсистемой). Есть альтернативные консольки (сделанные через обычный гуй). В некоторых кодировка настраивается, в некоторых стоит дефолтная CP1251 (из локали, наверно, дерёт).

ЗЫ Вообще, разговор ни о чём...


--------------------
PM MAIL ICQ Skype   Вверх
Dronchik
Дата 1.5.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



Вы что делаете??!!Не легче ли...

include# <windows.h>

void main()
{
char start[100];
CharToOem("Привет", start);
cout << start;
}


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
AndrRus
Дата 1.5.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Для отображения русского шрифта в консоли предпочитаю использовать следующее:
Код

#include <locale.h>

int main (int arg, char *args[])
{
    setlocale (LC_CTYPE, ".1251");
    setlocale (LC_MONETARY, ".1251");
... ... ... ... ... ...


PM MAIL ICQ   Вверх
Igor_K
Дата 11.2.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



А вы можете подсказать где меняется кодировка редактора в Билдере 6? 
PM MAIL   Вверх
bsa
Дата 11.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Igor_K @ 11.2.2008,  21:44)
А вы можете подсказать где меняется кодировка редактора в Билдере 6?

Вообще-то ты не по адресу.
В настройках редактора поменяй шрифт Courier New на Courier New Cyr
PM   Вверх
Igor_K
Дата 11.2.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Цитата(bsa @ 11.2.2008,  22:16)
Цитата(Igor_K @ 11.2.2008,  21:44)
А вы можете подсказать где меняется кодировка редактора в Билдере 6?

Вообще-то ты не по адресу.
В настройках редактора поменяй шрифт Courier New на Courier New Cyr

Спасибо!

А почему не по адресу? Тут же писалось много постов, что нужно сменить кодировку редактора. только от не написали как) А я то ламер не знаю как это делается. smile 
PM MAIL   Вверх
Djinn
Дата 12.2.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



 setlocale - на ура работает smile просто надо проект в юникоде делать smile и будет Вам щастье smile
PM MAIL   Вверх
bsa
Дата 12.2.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Igor_K @ 11.2.2008,  22:20)
А почему не по адресу? Тут же писалось много постов, что нужно сменить кодировку редактора. только от не написали как) А я то ламер не знаю как это делается. smile

Здесь речь идет о кирилице в выводимом тексте программы, а не о настройках редактора конкретной среды программирования.

Это сообщение отредактировал(а) bsa - 12.3.2008, 21:59
PM   Вверх
aleknek
Дата 2.3.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



Написал простенькую программу, которая запрашивает имя пользователя и фамилию, а затем выводит отдельной строкой. Так вот подключил локаль, как обычно делаю, для отображения русского текста, при наборе  все нормально, проблем никаких, а вот при выводе получается абракадабра всякая, уже заходил в настройки проекта поменял Use Unicode Character Set на  Character Non Set, толку никакого, затем подключил ф-ю ChаrToOem, толку тоже мало, пробывал также с помощью ф-и RusOut, (кто то ранее ее выкладывал) - результат ноль. Подскажите, пожалуйста, как быть, а то уже почти все перепробывал и бестолку ???  Все это пишется в среде Microsoft Visual Studio 2005 smile  
Код

// S_203_3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include "locale.h"
#include "conio.h"
#include <string>
#include "windows.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_CTYPE,".1251");
    setlocale (LC_MONETARY,".1251");

    char first_name [20];
    char last_name[20];
    char fio [40];
    char dest[100];
    cout << "Ваше имя: ";
    cin.getline(first_name, 20);
    cout << "Ваша фамилия: ";
    cin.getline(last_name, 20);
    strcpy (fio, first_name);
    strcat (fio, ", ");
    strcat (fio, last_name);
    CharToOem(fio, dest);
    cout << "Ваша фамилия и имя: " << dest;
    getch();
    return 0;
}




Это сообщение отредактировал(а) aleknek - 2.3.2008, 14:30
PM MAIL   Вверх
nerezus
Дата 2.3.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

Здесь речь идет о кирилице в выводимом тексте программы, а не о настройках редактора конкретной среды программирования.
 Ну так 2 варианта: либо конвертировать выходную информацию, либо получать конвертированную на входе. Настройка редактора - это второй способ.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
aleknek
Дата 2.3.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



Цитата(nerezus @  2.3.2008,  15:01 Найти цитируемый пост)
Ну так 2 варианта: либо конвертировать выходную информацию, либо получать конвертированную на входе.


Попробовал только что убрать CharToOem, а включить в программу функцию, выкладываемую раннее Redstuff,  результат тот же, хотя данная функция насколько я понимаю, как раз и занимается конвертированием, выходного текста. ??? 

Код

// S_203_3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include "locale.h"
#include "conio.h"
#include <string>
#include "windows.h"
using namespace std;

string ConvertCodepage(const char *fio);


int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_CTYPE,".1251");
    setlocale (LC_MONETARY,".1251");

    char result [40];
    char first_name [20];
    char last_name[20];
    char fio [40];

    cout << "Ваше имя: ";
    cin.getline(first_name, 20);
    cout << "Ваша фамилия: ";
    cin.getline(last_name, 20);
    strcpy (fio, first_name);
    strcat (fio, ", ");
    strcat (fio, last_name);
    ConvertCodepage(fio);
    cout << "Ваша фамилия и имя: " << result;
    getch();
    return 0;
}

string ConvertCodepage(const char *fio)
{
char *buffer=new char[strlen(fio)+1];
if (NULL == buffer)
return "";
AnsiToOem(fio,buffer);
string result(buffer);
delete[] buffer;
return result;
}


Это сообщение отредактировал(а) aleknek - 2.3.2008, 17:48
PM MAIL   Вверх
Ln78
Дата 3.3.2008, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



aleknek, направление конвертирования перепутано. В первом примере заменить
Код

//   CharToOem(fio, dest);
   OemToChar(fio, dest);

и будет работать
PM MAIL   Вверх
criz
Дата 12.3.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Товарищи, а как в качестве параметра функции передать массив из русских букв?
PM MAIL WWW   Вверх
bsa
Дата 12.3.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(criz @ 12.3.2008,  21:49)
Товарищи, а как в качестве параметра функции передать массив из русских букв?

так же, как и английских.
PM   Вверх
criz
Дата 12.3.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



К сожалению не получается. Например, я не могу открыть файл, если указываю имя на русском =(
Среда: VC++ 6.0
PM MAIL WWW   Вверх
bsa
Дата 12.3.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(criz @ 12.3.2008,  22:07)
К сожалению не получается. Например, я не могу открыть файл, если указываю имя на русском =(
Среда: VC++ 6.0

http://forum.vingrad.ru/forum/topic-189083.html
PM   Вверх
criz
Дата 13.3.2008, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



bsa, спасибо! Будем пробовать smile
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1212 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.