Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 14.04.2009
Сообщений: 36
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте. Работаю с 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2014, 20:12
Ответы с готовыми решениями:

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

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

Кодировки
Здравствуйте. Такая проблема: получаю текстовые данные по Serial-порту (символы киррилицы) потом...

Кодировки в си
Здравствуйте. Пишу библиотеку для ардуино. Пытаюсь определить, слово поступило (поступает табличный...

7
317 / 179 / 73
Регистрация: 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
2 / 2 / 1
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 22:02  [ТС] 3
Не помогло. перепробовал несколько вариантов. это может быть связано с тем, что VC++ 2013 английская (хотя данные из вне в Unicode приходят и на русском)? (без setlocale, кстати, ничего не работает кроме англ и цифр)

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


Вообще то логи принято писать в файл, а не в консоль.
0
2 / 2 / 1
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 23:07  [ТС] 5
про логи - естественно. сейчас просто отладка (да и какой вывод, если планируется обернуть в службу). Русская Win7, англ VS 2013 Express
Миниатюры
Кодировки (ошибки кодировки) в логировании  
0
317 / 179 / 73
Регистрация: 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
2 / 2 / 1
Регистрация: 14.04.2009
Сообщений: 36
15.08.2014, 23:16  [ТС] 7
тоже повторил эту ошибку. теперь буду разбираться почему в моем коде не работает это так как надо (и чем отличается setlocale от imbue(locale())?)
вот пример:
Миниатюры
Кодировки (ошибки кодировки) в логировании  
0
2 / 2 / 1
Регистрация: 14.04.2009
Сообщений: 36
17.08.2014, 19:59  [ТС] 8
Не понятно что было, но все получилось так: создание нового проекта VC++ и копирование (без изменений) туда исходного кода
0
17.08.2014, 19:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2014, 19:59
Помогаю со студенческими работами здесь

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

Нет кодировки?!
в общем я немного изменил функцию со справки под свои нужды(функция была аналогом dir'a).. вот...

2/8/16ичные кодировки
Немного не по теме раздела, но я думаю я тут найду ответ. В даташите в регистр просят записать...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru