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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [FAQ] Каракули вместо русских букв, Обсуждаем статью для FAQ 
:(
    Опции темы
JackYF
Дата 20.1.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Если
1) все примеры, наличествующие сейчас в статье, работоспособны
2) никто из камрадов не возьмётся
, то могу я с ограничениями - винды у меня не водится, поэтому могу подправить только стиль и описание до удобоваримого вида.

З.Ы.  smile Что там с остальными статьями?


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


Архимед
****


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

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



Цитата(JackYF @  20.1.2008,  20:06 Найти цитируемый пост)
Если
1) все примеры, наличествующие сейчас в статье, работоспособны

Ок, есть желающие проверить? smile


--------------------
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   Вверх
Kanes
Дата 6.2.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пока проверил 2:
Цитата

 Метод второй:
функции SetConsoleCP и SetConsoleOutputCP

Работает без проблем, единственное надо дополнить огранечения по применению, т.е. установка шрифта Lucida Console и не возможность работы в полноэкранном режиме

Цитата

Метод третий:
функции CharToOem и OemToChar

Работает, но, может я конечно что-то сам напутал, короче, для простоты написал ф-цию ToRus:
Код

char * ToRus(char * str)
{
    char * buf = new char [sizeof(str)];
    CharToOem(str, buf);
    return buf;
}

и простенький пример:
Код

//----------------------------------------------------------------
int main()
{
  cout << ToRus("строка\n");
  //какие-нибудь вычисления и т.п.
  cout << ToRus("еще текст");
  return 0;
}

Так вот, компилятор собирает все нормально, только при работе программа вылетает когда доходит до  второго cout'а

P.S.
Скоро проверю остольные способы
--------------------
Big gun - big future  
PM MAIL   Вверх
bsa
Дата 6.2.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Kanes
1. sizeof(str) в твоем случае всегда равно 4 (размер указателя, а не массива)
2. ты сделал new[], а кто будет делать delete[]?
Код
#include <string.h>
#include <stdio.h>
#include <windows.h>

char * ToRus(const char * str)
{
    char * buf = (char*)malloc(strlen(str) + 1); //если бы нужен был C++, то кто мешал бы воспользоваться std::string?
    CharToOem(str, buf);
    return buf;
}

int main()
{
     char *p;
     p = ToRus("строка\n");
     puts(p);
     free(p);
     //какие-нибудь вычисления и т.п.
     p = ToRus("еще текст");
     puts(p);
     free(p);
     return 0;
}

PM   Вверх
Damarus
Дата 6.2.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Код
#include <stdio.h>
#include <locale.h>

int main()
{
    printf("Тест\n");
    setlocale(LC_ALL, ".OCP");
    printf("Тест\n");
}

Цитата
D:\>gcc test.c -o test.c.exe

D:\>test.c.exe
╥хёЄ
╥хёЄ

D:\>


Код
#include <iostream>
#include <locale>
#include <stdexcept>

int main()
{
    std::cout << "Тест" << std::endl;
    
    try
    {
        std::locale::global(std::locale(".OCP"));
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
    
    printf("Тест\n");
}

Цитата
D:\>g++ test.cpp -o test.cpp.exe

D:\>test.cpp.exe
╥хёЄ
locale::facet::_S_create_c_locale name not valid
╥хёЄ

D:\>


MinGW 3.4.5
PM MAIL ICQ Jabber   Вверх
JackYF
Дата 6.2.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Damarus @  6.2.2008,  16:40 Найти цитируемый пост)
name not valid

дык и верно, что за .OCP? почему не .1251, не CP1251?


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


Эксперт
****


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

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



Damarus, посмотри внимательно статью. там перед текстовыми константами буква L стоит.
PM   Вверх
Damarus
Дата 6.2.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(JackYF @  6.2.2008,  18:48 Найти цитируемый пост)
дык и верно, что за .OCP? почему не .1251, не CP1251? 

1. Почему .OCP надо спрашивать у papam'а. 
2. С .1251, CP1251, ru_RU, Russian_Russia.1251, French_Canada.1252 и т.д. результат тот-же.

Цитата(bsa @  6.2.2008,  18:52 Найти цитируемый пост)
Damarus, посмотри внимательно статью. там перед текстовыми константами буква L стоит. 

libstdc++ из mingw не поддерживает unicode. Я думаю это вообще не должно играть роли.

PS. Вообще я хотел только показать, что не на всех компиляторах пример будет работать.
PM MAIL ICQ Jabber   Вверх
JackYF
Дата 6.2.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Damarus @  6.2.2008,  19:50 Найти цитируемый пост)
PS. Вообще я хотел только показать, что не на всех компиляторах пример будет работать. 

Нет, ну это да. Поэтому столько костылей и приводится, чтобы хоть что-нибудь работало в виндовой консоли...

З.Ы. Недавно разбирался с QString, могу показать, как сделать ещё один костыль на основе Qt4Core smile


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


Бывалый
*


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

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



ИМХО, пока реально работает только SetConsoleCP и SetConsoleOutputCP, проверял на 
* Microsoft Visual C++ Free Toolkit 2003
* Borland C++ Compiler 5.5
* mingw


--------------------
Big gun - big future  
PM MAIL   Вверх
LinuxanT
Дата 7.2.2008, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у мея так прокатило... в консоли

Код
#include <iostream>
#include <locale>
using namespace std;

int main()
{
  setlocale(LC_ALL, "Russian");
  cout << "Здесь должен быть русский текст\n";
  cin.get();

  return 0;
}


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


Эксперт
****


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

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



LinuxanT, какой компилятор?
PM   Вверх
Djinn
Дата 7.2.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

setlocale(LC_ALL, "Russian");


Сработало в MSVC 2005

Пасиба большое !  smile  smile 

Это сообщение отредактировал(а) Djinn - 7.2.2008, 12:13
PM MAIL   Вверх
Djinn
Дата 7.2.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



правда у мея так прокатило... в консоли

Код
#include <iostream>
using namespace std;

int main()
{
  setlocale(LC_ALL, "Russian");
  cout << "Здесь должен быть русский текст\n";
  cin.get();

  return 0;
}



Это сообщение отредактировал(а) Djinn - 7.2.2008, 19:48
PM MAIL   Вверх
JackYF
Дата 7.2.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Djinn @  7.2.2008,  18:46 Найти цитируемый пост)
#include <locale>


Djinn, ?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

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


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

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


 




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


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

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