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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.94
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
#1

Смена кодировки текста! - C++

08.09.2011, 17:05. Просмотров 4330. Ответов 11
Метки нет (Все метки)

опять хелп!!

C++
1
2
3
    std::string query = "netsh interface ip set addres name=\"" + interface_name + "\" static 192.168.2.2 255.255.255.0";
    std::cout << query;
    system(query.c_str());
где печалька закралась? все файлы, откуда считывается информация изначально в системной кодировки. где я ее мог конвертнуть в иероглифы>_<
Миниатюры
Смена кодировки текста!  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2011, 17:05     Смена кодировки текста!
Посмотрите здесь:

Изменение кодировки текста - C++
Программа на Borland C++ читает FB2 файл, получает из него имя автора, название, серию и т.п. как провести конвертацию из разных...

Напишите программу кодировки (декодировки) текста? - C++
Напишите программу кодировки (декодировки) текста. Каждый символ преобразуется в число, к каждому числу прибавляется константа, числа снова...

В чём отличия кодировки ms dos от кодировки ms windows? - C++
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

Кодировки (ошибки кодировки) в логировании - C++
Здравствуйте. Работаю с WINAPI и оттуда нормально приходят наименования на русском. Вот решил логирование организовать и на этом повалился...

Кодировки в С++ - C++
Подскажите... Пытаюсь разобраться с кодировками в С++ на простом примере...Как заставить С++ принимать русские слова и при вводе и при...

Кодировки - C++
Интересен вопрос с кодировками, хочеть до конца разобраться. Есть несколько вопросов, данные подразумевается будут храниться после...

Кодировки, языки - C++
Здравствуйте. Не могу разобраться с тем как работать с файлами и строками на разных языках. Русский получилось писать с помощью локали...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
08.09.2011, 18:01  [ТС]     Смена кодировки текста! #2
апну без палева ))
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.09.2011, 05:33     Смена кодировки текста! #3
Цитата Сообщение от co6ak
C++
1
interface_name
выведи на экран
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 09:59  [ТС]     Смена кодировки текста! #4
на скрине вывод.
"Подключение по локальной сети"
в запросе тоже нормально
как только отсылается в system - здездец кириллице

Добавлено через 31 минуту
кодировка самые азы. неужто ни кто не знает
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.09.2011, 10:10     Смена кодировки текста! #5
а вообще в cmd работает ?
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 10:22  [ТС]     Смена кодировки текста! #6
отлично все работает.
если название интерфейса латиницей - срабатывает весь код. винда так же глотает без проблем.

пробовал imbue - выбивает нафиг.

все из-за вот приведенного куска кода.
скрин - результат выполнения в консоли

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

4-я - результат выполнения команды в netsh, где кривое имя интерфейса
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.09.2011, 10:30     Смена кодировки текста! #7
в лине:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    string s = "Подключение по локальной сети";
 
    cout << s << endl;
    system(("echo " + s).c_str());
    return 0;
}
Код
[guest@localhost tests]$ ./t
Подключение по локальной сети
Подключение по локальной сети
[guest@localhost tests]$
это исходный файл в utf-8, консоль в utf-8
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 10:47  [ТС]     Смена кодировки текста! #8
в винде - первый скрин >_<

вдруг будет смысл.

C++
1
2
        system("netsh interface ip show address > C:\\interface.txt");
        std::ifstream file("C:\\interface.txt");
оттуда посимвольно выдергиваю "Подключение по локальной сети

Добавлено через 12 минут
могу еще полностью выложить весь класс с реализацией.
мало-ли...
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
09.09.2011, 10:53     Смена кодировки текста! #9
co6ak, а как получаете interface_name?
Также перед выполнением кода из первого сообщения этой темы, выполните это:
C++
1
system("chcp");
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 10:56  [ТС]     Смена кодировки текста! #10
метод getInterfaceName
в классе объявлена переменная std::string interface_name;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "ipinterface.h"
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <locale>
 
 
IPInterface::IPInterface()
{
}
 
bool IPInterface::getRightInterface()
{
    setLocale(LC_ALL, ".866");
    if ( ! checkPing())
    {
        system("netsh dump > C:\\dump.txt");
        system("netsh interface ip show address > C:\\interface.txt");
 
 
 
 
        std::ifstream file("C:\\interface.txt");
        std::string lines;
 
        if(file.is_open()){
                std::string buff;
                while( !file.eof())
                {
 
                        getline(file, buff);
                        lines = buff + '\n';
                        if ( searchLine( lines ) )
                        {
                            std::cout << interface_name << std::endl << std::endl;
                            if ( connectSuccessed()) return true;
                            else
                                system("netsh exec C:\\dump.txt");
                        }
 
                } file.close();
        } else
        {
            std::cerr << "Error open file!\n";
            return false;
        }
    }
 
    return true;
}
 
bool IPInterface::searchLine ( std::string line )
{
    if ( line.find("\"") != std::string::npos )
    {
        if ( line.find("VMware")  == std::string::npos && line.find("virtual") == std::string::npos &&
             line.find("Virtual") == std::string::npos && line.find("Wi-Fi") == std::string::npos &&
             line.find("WiFi")    == std::string::npos)
        {
            if ( !getInterfaceName(line)) return false;
            std::cout << line << std::endl;
            return true;
        }
    }
    else
        return false;
}
 
bool IPInterface::getInterfaceName ( std::string line )
{
    interface_name = "";
    const char *full_line = line.c_str();
    int index = 20;
    while ( full_line[ ++index ] != '\"' );
    while ( full_line[ ++index ] != '\"' ) interface_name += full_line[index];
    return true;
 
}
 
bool IPInterface::connectSuccessed()
{
    std::string query;
    query = "netsh interface ip set addres name=\"" + interface_name + "\" static 192.168.2.2 255.255.255.0";
    const char* zapros = query.c_str();
    std::cout << query << std::endl;
    system(query.c_str());
 
    if ( !checkPing() ) return false;
    return true;
}
 
bool IPInterface::checkPing()
{
    system("ping 192.168.2.245 -n 1 > C:\\ping.txt");
 
    bool flag = false;
 
    std::ifstream pingFile("C:\\ping.txt");
    std::string pingLines;
 
    if(pingFile.is_open()){
            std::string buff;
            while( !pingFile.eof())
            {
                    getline(pingFile, buff);
                    pingLines = buff + '\n';
                    if ( pingLines.find("100%") != std::string::npos ) flag = true;
            } pingFile.close();
    } else
    {
        std::cerr << "Error open file!\n";
        return false;
    }
 
    if ( flag ) return false;
 
   return true;
 
}
 
bool IPInterface::restoreInterface()
{
    system("netsh exec C:\\dump.txt");
    return true;
}
Добавлено через 41 секунду
Цитата Сообщение от Евгений М. Посмотреть сообщение
C++
1
system("chcp");
866, как и подразумевается

Добавлено через 1 минуту
это далеко не окончательный вариант. есть куда дорабатывать. но принцип работы останется
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
09.09.2011, 11:02     Смена кодировки текста! #11
У меня на 7-ке получается так:
Bash
1
2
chcp 1251
netsh interface ip show address > C:\\interface.txt
Результат в кодировке cp1251.
Попробуйте достать оттуда строку и выполнить код из первого сообщения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2011, 11:11     Смена кодировки текста!
Еще ссылки по теме:

Ошибка кодировки? - C++
При присваивании русского слова к переменной input типа string - ошибка Но стоит поменять на английское слово - получается все верно. ...

Перевод кодировки - C++
Всем привет! Такая задача Имеем html-код Знаем кодировку (charset) Если кодировка, отличная от UTF-8 - нужно выполнить...

Преобразование кодировки - C++
Тема не создаётся Добавлено через 12 секунд Можно ли такое замутить чисто через STL без всяких сторонних утилит типа iconv ? P.S.:...

Нет кодировки?! - C++
в общем я немного изменил функцию со справки под свои нужды(функция была аналогом dir'a).. вот код: #include &lt;windows.h&gt; #include...

Кодировки в консоли Windows - C++
Здравствуйте. Хотелось бы узнать, почему при запуске программы в консоли Windows, система отправляет массив argv в функцию main в...


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

Или воспользуйтесь поиском по форуму:
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 11:11  [ТС]     Смена кодировки текста! #12
Цитата Сообщение от Евгений М. Посмотреть сообщение
У меня на 7-ке получается так:
Bash
1
2
chcp 1251
netsh interface ip show address > C:\\interface.txt
Результат в кодировке cp1251.
Попробуйте достать оттуда строку и выполнить код из первого сообщения.
теперь иероглифами все, кроме "Подключение по локальной сети" >_< но запрос не выполняется

Добавлено через 4 минуты
на семерке работает о_О на ХП нет...
ненавижу вЕнду ))
Yandex
Объявления
09.09.2011, 11:11     Смена кодировки текста!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru