С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
#1

Кодировки (ошибки кодировки) в логировании - C++

15.08.2014, 20:12. Просмотров 469. Ответов 7
Метки нет (Все метки)

Здравствуйте. Работаю с WINAPI и оттуда нормально приходят наименования на русском. Вот решил логирование организовать и на этом повалился (приходят символы как при проблеме с кодировкой). Вопрос: перед посылкой придется использовать какую-то обработку по перекодировке? Очень простой пример (вырвано из кода только то что нужно):
C++
1
2
3
4
5
6
7
8
void ToLog(wstring str){
    wcout << str << endl;
}
int main(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "RUS");
    ToLog(L"текст");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 20:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кодировки (ошибки кодировки) в логировании (C++):

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

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

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

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

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

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

7
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 20:58 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <locale>
#include <iostream>
using namespace std;
 
void ToLog(wstring str) {
    wcout << str << endl;
}
 
int main(int argc, char* argv[]) {
    locale l = locale("");
    wcout.imbue(l);
    ToLog(L"текст");
}
0
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 22:02  [ТС] #3
Не помогло. перепробовал несколько вариантов. это может быть связано с тем, что VC++ 2013 английская (хотя данные из вне в Unicode приходят и на русском)? (без setlocale, кстати, ничего не работает кроме англ и цифр)

Добавлено через 6 минут
да, и при дебаге видно что в переменные записывается такой же бред
0
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 22:06 #4
Ошибся немного.
Русская Win7, англоязычная VS2013 Express:
Кодировки (ошибки кодировки) в логировании

Вообще то логи принято писать в файл, а не в консоль.
0
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 23:07  [ТС] #5
про логи - естественно. сейчас просто отладка (да и какой вывод, если планируется обернуть в службу). Русская Win7, англ VS 2013 Express
0
Миниатюры
Кодировки (ошибки кодировки) в логировании  
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 23:16 #6
Написал же выше, что ошибся, нужно
C++
1
2
locale l = locale(".866");
wcout.imbue(l)
или просто
C++
1
wcout.imbue(locale(".866"));
0
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 23:16  [ТС] #7
тоже повторил эту ошибку. теперь буду разбираться почему в моем коде не работает это так как надо (и чем отличается setlocale от imbue(locale())?)
вот пример:
0
Миниатюры
Кодировки (ошибки кодировки) в логировании  
ems2811
2 / 2 / 0
Регистрация: 14.04.2009
Сообщений: 36
17.08.2014, 19:59  [ТС] #8
Не понятно что было, но все получилось так: создание нового проекта VC++ и копирование (без изменений) туда исходного кода
0
17.08.2014, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 19:59
Привет! Вот еще темы с ответами:

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

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

Смена кодировки текста! - C++
опять хелп!! std::string query = &quot;netsh interface ip set addres name=\&quot;&quot; + interface_name + &quot;\&quot; static 192.168.2.2...

Создание нормальной кодировки - C++
Сейчас изучаю тему строк и написал вот такую легкую программу #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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