Как сделать, чтобы консольные проги, написанные на С++, понимали русский... Я вообще новичок в программинге, можно по подробней??? Заранее спасибо!
|
from Xwine :locale.h тебе поможет
from Xwine ну так открой "Дейтла и Дейтла" там подробно описано какие функции использовать и какие значения задавать . |
YackoN
Есть такая функция в мастае CharToOem() Поищи в WinAPI. Перед выводом на консоль обработай строку этой функцией Она конвертнет Win->Dos. И на экране все будет по русски а не по китайски. :) А вообще-то где-то на этом форуме уже это было. Удачи! |
Cпасибо!:)
|
YackoN
Если имеется в виду текст на русском языке, то нужно сделать следующее: Во-первых нужно создать заголовочный файл Код:
#include <windows.h> Код:
SetConsoleOutputCP(1251); |
Кириллица?
Как сделать так, чтобы в консольных приложениях отображалась кириллица?
|
Можно использовать WinAPI функцию CharToOem():
Цитата:
Код:
#include <windows.h> |
Рискну предположить что такое прокатит:
Код:
uses Windows; |
Русские символы в Visual С++
Простите, если такой вопрос уже был, но все-таки: как сделать чтобы Visual C++ 6.0 выводил нормальный русские буквы, а не "крякозяблы"?
|
Если Вы про консольный режим, то:
1. Откройте исходник 2. File -> Advanced Save Options -> Encoding -> Cyrillic (DOS) - Codepage 866 Правда у меня VS.NET, но я думаю, что эти же опции (или подобные) должны быть и у Вас ;) |
Еще об одном способе узнал:
Цитата:
|
Savant
Я только добавлю, что Цитата:
А вообще subj уже обсуждался, в подробностях, даже дважды, емнип... |
*Решено* | (Builder) C++ -> ASCII + ANSI
Помогите плиз. Я считываю спомощю функции fopen, fread, fwrite с ASCII файла данные, но например в ShowMessage они отображаются как ANSI текст. И вот я никак немогу найти как зделать чтобы текст в переменой типа char или String перевести с ASCII в ANSI или с ANSI в ASCII.
|
а MSDN для кого ? http://msdn.microsoft.com
CharToOem Function The CharToOem function translates a string into the OEM-defined character set. Syntax BOOL CharToOem(ParametersLPCTSTR lpszSrc, LPSTR lpszDst); lpszSrc [in] Pointer to the null-terminated string to translate.OemToChar Function The OemToChar function translates a string from the OEM-defined character set into either an ANSI or a wide-character string. Syntax BOOL OemToChar(Parameters lpszSrc [in] Pointer to a null-terminated string of characters from the OEM-defined character set. |
О спасибо тебе Старожил :) Не пойму как я не мог найти ету функцию в справке? Хотя искал все что связано с словом ОЕМ...
|
C++ | Кодировка символов
вот, очередной тупой вопрос !!! такая проблема:
Код:
#include <iostream> |
sasha11
А вот у меня "привет" пишет! А почему? потому что вопрос кодировки ортогонален вопросу языка, а зависит только от среды. У меня всё в UTF8 - и текст программы, и кодировка в консоли. У вас же исходный текст в windows-1251 (а следовательно и слово "привет"), а стандартная кодировка в консоли windows - oem866 (досовская). Отсюда и все проблемы. Есть как минимум 4 способа побороть эту проблему. Все они уже на этом форуме были перечислены не раз. Я уже говорил вам, что стоит пользоваться поиском прежде чем задавать вопросы? В следующий раз буду просто тупо закрывать тему. Ссылки на существующие темы с тем же вопросом: http://forum.oszone.net/showthread.php?t=64366 http://forum.oszone.net/showthread.php?t=30066 http://forum.oszone.net/showthread.php?t=29861 http://forum.oszone.net/showthread.php?t=42553 http://forum.oszone.net/showthread.php?t=47358 http://forum.oszone.net/showthread.php?t=44139 |
все понял, просто я в поиске ввел "кодировка в C++", "кодировка", и ничего нужного не нашел !!! в следующий раз буду делать более расширенные запросы(в поиске) !!!!!!
|
Кирилица в консоли
Учитывая, что архив с файлом автор удалил из своего сообщения (видимо из-за нехватки места), а скачивать неоткуда, было принято решение оформить шапку темы, в котором будет выложено содержимое заголовочного файла. ;)
Если кому надо, то могу кинуть билиотеку что бы после компиляции программы на Microsoft Visual C++ 6.0 она отображала шрифт кирилицы. Создать заголовочный файл russian.h Содержимое russian.h Код:
#include <iostream.h> Код:
#include "russian.h" |
Durson, а откомпилированая программа, если её запустить на другом компе, не потребует при запуске эту библиотеку?
|
Вро де бы нет, проверь?
ну что никто ещё не проверил? ) |
Durson, прога библиотеку не спросила. Что за DLLка такая?
|
Durson, Нормально, кирилица работает. Конечно выкладывай, не мне так другим поможешь. Это значит ты пишешь в коде:
Код:
... |
Блин не библиотечный файл а заголовочный. :)
|
Цитата:
Выкладываю |
Durson, У меня такое предупреждение выдаёт:
Код:
[C++ Предупреждение] rus.h(6): W8058 Cannot create pre-compiled header: initialized data in header |
Durson, такой файл можно написать прямо в посте, что б его и гости форума видели
Цитата:
|
Ребята, подскажите как это можно прикрутить к моему Borland'y ?
|
Drongo, а что он ругается на этот код, если поместить его прямо в файл cpp? Сам я Borland Builder только один раз клацал, мне показалось, что откомпилированные проги на нём дают такую же скорость как и Delphi, по этому не используюсь этим компилятором C\C++. Но вопрос выбора компилятора оставим для другой темы. :wink:
|
Не не ругается, компилится с предупреждением, но текст всё равно иероглифами, в общем так есть папка, скажем - Folder в неё кладу файлы HelloWorld.cpp и rus.h подключаю заголовочный файл
Код:
#include <iostream.h> |
Drongo, так нужно ж так cout<<Rus1(" Добро пожаловать в мир программирования")<<endl; файл то подключается, а функция Rus1() с него не задействуется.
|
Admiral, Точно!!!! Браво! :victory: :clapping: Как я мог так тормознуть! :laugh: Сам же подобное писал недавно:
Так а если что, можно же попробовать заменить содержимое заголовочного файла, этим кодом? Надо попробовать, завтра! |
Drongo, такое бывает у всех, ведь мы же люди.
Да конечно, всегда возможно по разносить функции по файлам, именно для этого и придумали include. Компилеру все равно, он их перед компиляцией соединяет в один и компилит целиком. |
Admiral, Durson, Ну ребята! Спасибо Вам за файл и объяснения! :yahoo: :yes: :up
|
Цитата:
Цитата:
Для того что бы вместо Rus1("") писать Rus("") нужно изменить библиотечный файл: Код:
#include <iostream.h> |
Durson,
Цитата:
Заголовочный файл назвал - russian.h Функцию - Rus Единственный вопрос. В заголовочном файле russian.h есть ещё заголовочные файлы Код:
#include <iostream.h> |
В новую программу эти заголовочные файлы уже можно не писать :)
|
Durson,
Цитата:
|
Цитата:
|
Durson, В самом заголовочном файле нужен :) Тоесть так:
|
Использывание русского языка при написании программы
Подскажите как мне использовать русские символы при написании программы.
Пишу на на Dev-C++( http://www.bloodshed.net/ ) OC :Windows Vista Ultimate SP1. А то надоело писать Код:
Vvedite symmy 4isel Код:
Введите сумму чисел |
Универсальный совет: "поиграйте" кодировкой файла с исходным кодом. В какой кодировке сохраняете сейчас? Какое приложение пишете - консольное или GUI?
Если не секрет, почему используете компилятор, у которого последний релиз датирован 2000 годом? |
Цитата:
Искал в "Сервис->Параметры компилятора" но так и не нашол кодировку. Я помню, когда учился писать на Turbo Pascal 7.0 то что бы можна было б писать русскими символами нужно было, какие-то файлы кидать в System 32, это на Windows XP |
Цитата:
|
можно сменить кодовую страницу консоли командой chcp, а потом запускать ваше приложение
можно в нормальном редакторе вписать кириллицу, потом откомпилировать концептуально правильнее символьные строки хранить во внешнем файле, а не в коде |
Вложений: 1
Вот я на оф. форуме нашол файлы которые позволяют использование русского языка:
Код:
config.h.in, configure, configure.in, COPYING, INSTALL, koi.1, Makefile.in, README, rus.1, rus.c Может кто поможет мне в это проблеме. В архиве нет вирусов, так что можете свободно качать) |
SS3, Прочитайте с самого начала, возможно решение предложенное Durson'ом, вам подойдёт.
|
Видил в книге "Павловска ООП" пример написания класса для ввода/вывода кириллицы. Там при вызове cout/cin из заголовочного файла iostream.h подменялись на "наши" cout/cin и тем самым текст написанный на кириллице выводился нормально. Код проги предназначался для компиляции на Visual C++ 6.0. Увы данного компилятора у меня не было и поэтому я не смог потестировать(побывал компилировать на MinGW, но было куча не понятных ошибок).
|
Цитата:
|
Цитата:
Код:
//файл CyrIOS.h Вызов: Код:
#include "CyrIOS.h" //смотря как назовёте |
Зачем так усложнять код программы, вот самый простой способ как отобразить в консоли русский язык:
Нужно открыть все волишь командную строку cmd. Потом для удобства перейти на рабочий стол вот так: cd "Рабочий стол" <Enter> Documents and Settings\hda0\Рабочий стол>[/i] А дальше, все еще проще. echo Привет, вот и русский язык в консоли > rus.txt Всё. На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю. За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда! |
Помогите включить кирилицу в Win32 console Application
Я в C++ новичёк, пишу простенькую прогу Win32 console Application (запускается она не в windows-окне,а в командной строке). Так вот при выводе на экран текста на русском, кириллические символы не отображаются, точне выводятся каляки. Например:
cout << "Введите число от 1 до 10" << endl; Фраза на кирилице не пашет, а писать русские слова английскими буквами не прилично. Помню, что кто-то делал поддержку кирилицы, но как???????????????? |
вот что могу предложить:
Код:
#include <iostream> |
Alan85,
Цитата:
Alan85, Admiral, hda0, Drongo, Durson, YackoN, Busla, ganselo, SS3, К сожалению ни один из способов, приведённых выше, у меня не прокатил (возможно я делаю что-то не так)... Кто-нибудь объясните пошагово, я начал заниматься с++ только 3 месяца назад и мне только 15 лет. Как вывести в консоли: #include <iostream> #include <windows.h> using namespace std; int main() { cout << "Ура, получилось!" << endl; return 0; } Моя прога очень длинная и там очень много cout <<'оф, поэтому нужно сделать так, чтобы не пришлось всё переписывать, а добавить в заголовке какой-нить include. Вобщем если так нельзя то всё равно помогите.... Кодю я в Microsoft Visual C++ 6.0 Моя прога во вложении. |
вот что получилось:
Код:
// Windows XP SP3; BDS 2006; 21.03.2009; |
В Vista и Windows 7 не работает :(
|
сделал для Vista и XP одновременно (проверял на Vista SP1) :
Код:
// Windows XP SP3; BDS 2006; 21.03.2009; |
Цитата:
Код:
#include <iostream> |
Alan85, Ура, спасибо тебе великое
Drongo, А твой пример при компиляции ссылается на: error C2440: 'initializing' : cannot convert from 'char *' to 'unsigned char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Error executing cl.exe. |
Зачем так усложнять код программы, вот самый простой способ как отобразить в консоли русский язык:
Нужно открыть все волишь командную строку cmd. Потом для удобства перейти на рабочий стол вот так: cd "Рабочий стол" <Enter> Documents and Settings\hda0\Рабочий стол> А дальше, все еще проще. echo Привет, вот и русский язык в консоли > rus.txt Всё. На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю. За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда! |
hda0, данный метод подходит для статического текста, а если например у нас большая база данных из другого источника (с кодировкой 1251) . Да и само по себе генерация файла потом копирование информации от туда в исходники имхо костыли еще те... и не понятно как потом не запутаться что есть где смотря все это в 1251 кодировке (разве что повторно набирать тот же текст)
|
Цитата:
Вместо Код:
... Код:
... |
Без проблем. Если есть far, то там в редактировании файла можно сразу же поставить кодировку dos, и спокойно писать на русском языке, ну незнаю, просто то что я написал, занимает очень мало кода и мне например очень удобно через far писать, а вообще я думаю написать собственный редактор сразу с кодировкой dos, и с сохранением файла с расширением bat.
|
Вот вариант своего класса для ввода/вывода на кириллице
(для Visual C++ 5.0 и более поздних) Код:
#ifndef CYR_IOS_H Код:
#ifndef RUS_H_INCLUDED Копируем например в rus.h код ну и вызывем так: Код:
#include "rus.h" //смотря как назвали |
Всем привет!
Работая с функцией isdigit() (данная функция определяет - является ли символ числом), необходимо было проверять является ли её потенциальный аргументы латинским символом. При взятии от кириллического происходит крушение программы. Это подвело к тому, что данная функция и не нужна, раз идёт проверка символов то уже проще самостоятельно определить является ли символ числом. Для корректной работы isdigit() с массивами символов, где может быть кириллица, нужно определять массив символов как unsigned char, а не просто char, по этому решения сабжа предполагает использования в двух вариантах. Итак, имеет MS-DOS кодовую страницу 866 (Code Page 866 MS-DOS) применяемую в консольных приложениях для Виндовс. Её всегда можно подсмотреть таким вот образом Код:
for (int i=0;i<256;i++;) Код:
#include <stdio.h> strlen ведь не по зубам подсчитать длину unsigned char? Если всё же по зубам пожалуйста поправьте, а то в одной программе, где много strlen и используется isdigit() и массив char, при переходе на unsigned char не хотелось бы отказываться от неё. Пока ориентируемся на управляющий символ конца строки '\0' и используем цикл while В случаи char массива можно использовать цикл for, предельное значение подскажет функция strlen - for (int i=0; strlen(str); i++) Единственное что, буква Ё и другие кириллические символы идущие в кодовой странице MS-DOS 866 с кодами после 240, не учтены в коде данной программы. Спасибо за внимание. |
Ну вы ребят даете, громоздкие коды такие :) Сори за остроумность, на на мой взгляд загон из Win в Koi того не стоит :)
Мона сделать простую функцию, аргументом которой текст Koi, а возвратом будет Win :) Это пишется в пару строк, что то типо того: Код:
char KoiWin(char sym) в окне выдавали :) Например для того же указания локации с русскими именами, этого вполне достаточно :) З.Ы. - Сори если не втему, я просто полностью не читал все сообщения, тока то YackoN, что писал :) |
Код:
char* Decode_DOS_to_Win(char * str) |
.Земляк. , зачем это вообще нужно, ведь есть уже готовые функции (правда только в win): CharToOem(...), OemToChar(...).
|
Ну вы блин даёте!
Решение, которое точно работает в MSVS: Код:
setlocale( LC_ALL, ".1251" ); |
(!!!) Видим 866, имеем 1251 (!!!) + возможность вводить пароли ***** символами :) (!!!)
Значит к какому результу я притаранился :) Для начала в теле функции main() прописываем APIшные строки: SetConsoleCP(1251); SetConsoleOutputCP(1251); Затем, у меня стоит своя собственная приблуда, которая ограничивает количество вводимых символо при помощи label: goto label; в теле которого я тупо повесил char cWord = getch(); и если cWord != VK_RETURN, пишем в массив СИМВОЛ в кодировке 1251 а на экран выводим в кодировке 866 (OEM); Вот листинг :) Код:
bool GetArg(char cString[], int iSize, bool Masked) Код:
void ToWin(char *symbol) Да и уж извините что офтопю, просто на радостях: Написал штучку зугружающую картинку в консоль :) вот она: Код:
for(long y = 0; y < 120; ++y) сначала добавляю строки #ifndef MYLOGO_H #define MYLOGO_H unsigned long logo_img[размер pBits в байтах] = { ... далее циклом вставляю pBits[x] << ","; (!!!) // Самое главное каждые 10 выводов в файл, надо вставлять '\n' ибо компилятор будет материться если в строке будет дофига символов :) Да и логотип такого размера будет туговато грузиться на машинках от 900 Мгц :) так что лучше делать голотипчик размером не более 5000 байт, в таком случае он на стареньких компах будет более менее грузиться (например проверил на Asus Eee 701 - 10кратное обновление картинки заняло около 20 сек, в то время как на 2х-яйцовом камушке эта дело занимало меньше секунды)))) |
вот этот файл при подключении позволяет выводить кириллицей.
подключаешь, #include "rus8.h" B main и rus8(); в самом теле main сам хэдер Код:
/* RUS8.H |
Цитата:
|
Такая же петрушка, Code Blocks & mingw не дают кириллицу.
Я вот всё думаю, если в редакторе 1251 сменить на 866, чем это грозит? Потом в другом месте перекорёжит? Ещё нарыл решение. в заголовок вставляем #include<clocale> в main setlocale(LC_CTYPE, ""); Тоже, почему-то, не работает. НАШЁЛ!!! В main прописываем: system("chcp 1251 > nul"); |
#include <windows.h>
SetConsoleCP(1251); SetConsoleOutputCP(1251); Для ввода и отображении кирилицы |
Цитата:
|
Код:
//******************************************************* |
#<windows.h>
int main() { system("chcp 1251 > nul"); И в свойствах консольного окна на вкладке шрифт выбрать Lucida Console |
После долгого перерыва занялся. Свежая версия CodeBlocks 10.05 с набортным компилятором GCC.
М-дя... Ни один из способов не работает. ---upd 12/07/10 Сегодня работает. Ничего не понимаю в этом полтергейсте. |
|
Предлагаю еще один вариант: ссылка
Может, кому и понравится. |
Цитата:
|
Использую
Код:
#include <windows.h> Цитата:
|
зачем изобретать велосипед? я так делаю:
Код:
#include "stdafx.h" |
Цитата:
|
Время: 10:58. |
Время: 10:58.
© OSzone.net 2001-