Форум программистов, компьютерный форум CyberForum.ru

Функция gets() возвращает текст в неправильной кодировке - C++

Восстановить пароль Регистрация
 
apeorin
Сообщений: n/a
22.10.2012, 15:52     Функция gets() возвращает текст в неправильной кодировке #1
Здравствуйте. Подскажите пожалуйста, что с этим можно сделать...
Здесь, текст который будет введен в строке "Введите строку: " должен быть выведен в графе "Вот введенная Вами строка: ". Вот исходник:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
        char sample[40];
cout << "Введите строку: ";
    gets(sample);
cout << "Вот введенная Вами строка: " << sample;
getch();
return 0;
}
Так вот, при запуске этой программы, в графе "Вот введенная Вами строка: " выводятся иероглифы, вместо русского текста, а вот с английским все в порядке.

SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Не решают данную проблему.
А переключение шрифта на Lucida Console не подходит. Есть ли еще какие то способы решения этой траблы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 15:52     Функция gets() возвращает текст в неправильной кодировке
Посмотрите здесь:

Функция возвращает массив C++
В какой кодировке getch() возвращает символ? C++
C++ Функция возвращает объект
C++ Функция get() не возвращает значение
Функция не возвращает false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
22.10.2012, 17:03     Функция gets() возвращает текст в неправильной кодировке #2
Недавно уже говорил, поэтому повторюсь:
При использовании строковых литералов состоящих из элементов типа char(1 байт) и содержащих кириллицу:
1) следите за тем, чтобы исходный файл в котором используются эти константы не был сохранён в юникоде;
2) следите за тем чтобы кодировка файлов, в которых используются строковые литералы, и кодировка консоли совпадали.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
22.10.2012, 21:18     Функция gets() возвращает текст в неправильной кодировке #3
Подойдет?
C++
1
setlocale(LC_CTYPE, "");
romae777
1 / 1 / 0
Регистрация: 14.03.2010
Сообщений: 9
22.10.2012, 22:37     Функция gets() возвращает текст в неправильной кодировке #4
надо вставить
#include <Windows.h>
потом
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
и в сплывающем консольном окне свойства меняем язык" Lucida Console"
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
22.10.2012, 22:41     Функция gets() возвращает текст в неправильной кодировке #5
Цитата Сообщение от rangerx Посмотреть сообщение
следите за тем, чтобы исходный файл в котором используются эти константы не был сохранён в юникоде
То есть вы считаете, что в исходниках не должно быть ничего кроме ANSI? Это правильно.
maxprig
 Аватар для maxprig
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 21
22.10.2012, 22:59     Функция gets() возвращает текст в неправильной кодировке #6
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
        char sample[40];
cout << "Введите строку: ";
    gets(sample);
cout << "Вот введенная Вами строка: " << sample;
getch();
return 0;
}
apeorin
Сообщений: n/a
23.10.2012, 08:49     Функция gets() возвращает текст в неправильной кодировке #7
Цитата Сообщение от coloc Посмотреть сообщение
Подойдет?
C++
1
setlocale(LC_CTYPE, "");
Так же, иероглифы...

Добавлено через 2 минуты
Цитата Сообщение от maxprig Посмотреть сообщение
Попробуйте так
Код
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
        char sample[40];
cout << "Введите строку: ";
    gets(sample);
cout << "Вот введенная Вами строка: " << sample;
getch();
return 0;
}
Иероглифы вместо русского
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 18:19     Функция gets() возвращает текст в неправильной кодировке
Еще ссылки по теме:

Функция получает массив указателей на строки и возвращает строку в динамической памяти, содержащую объединенный текст из входных строк C++
C++ Функция не возвращает значение
C++ Текст в кодировке cp1251 перевести в utf8 и обратно?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.10.2012, 18:19     Функция gets() возвращает текст в неправильной кодировке #8
Цитата Сообщение от apeorin Посмотреть сообщение
Так же, иероглифы...
вы вообще читаете, что вам пишут? постами выше вам написали ответ
надо вставить
#include <Windows.h>
потом
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
и в сплывающем консольном окне свойства меняем язык" Lucida Console"

у вас ввод в одной кодировке, а выводите в другой, вот и крокозябры
Yandex
Объявления
23.10.2012, 18:19     Функция gets() возвращает текст в неправильной кодировке
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru