Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338

Проблема преобразования символов типа wstring в string

31.10.2020, 18:32. Показов 5727. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть следующий код который преобразовывает wstring in string, но при попадании символов выводит кракозяблики:
C++
1
2
3
const wchar_t* s = sheet->readStr(row, col);
wstring wstr(s);
string str(wstr.begin(),wstr.end());
Как это исправить?
Или может есть более удобный способ получить символы из const wchar_t* в формате UTF-8?

Добавлено через 11 минут
Цитата Сообщение от SkYMaaN Посмотреть сообщение
символов
буквенных**
с числами всё ок
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2020, 18:32
Ответы с готовыми решениями:

Ошибки преобразования числа типа Double в String
Доброго времени суток, форумчане. У меня серьезная проблема с преобразованием , взгляните: begin begin var i: Double; ...

Преобразование типов: проблема преобразования string во float
Всем привет. Подскажите как побороть ошибку: Неявное преобразование типа "string" в "float" невозможно То есть на экран у...

Проблема преобразования текстового типа данных в числа?
Ситуация такая есть число в формате текста, например '8.1230000', так вот стандартные типы преобразований типов данных типа CDec или CDbl...

33
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2020, 21:52
Лучший ответ Сообщение было отмечено SkYMaaN как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Может ошибка допущена мной в создании JSON объекта?
я ж тебе показал как делать правильно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    std::setlocale(LC_CTYPE, ".UTF-8");
    namespace X = ::tools::utf8;
 
    const json cfg =
    {
        { X::convert(L"Найменування_показників"), {}},
        { X::convert(L"Одиниці_вимірювання"), {}},
        { X::convert(L"р.Дніпро(річкова_вода)"),   {}},
        { X::convert(L"р.Десна(річкова_вода)"), {}},
        { X::convert(L"Дніпровська_водопровідна_станція"), {}},
        { X::convert(L"Деснянська_водопровідная_станція"), {}},
    };
    const std::string v = cfg.dump();
    std::cout << v << '\n';
можно ещё вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    std::setlocale(LC_CTYPE, ".UTF-8");
 
    const json cfg =
    {
        { u8"Найменування_показників", {}},
        { u8"Одиниці_вимірювання", {}},
        { u8"р.Дніпро(річкова_вода)",   {}},
        { u8"р.Десна(річкова_вода)", {}},
        { u8"Дніпровська_водопровідна_станція", {}},
        { u8"Деснянська_водопровідная_станція", {}},
    };
    const std::string v = cfg.dump();
    std::cout << v << '\n';
Цитата Сообщение от hoggy Посмотреть сообщение
важно:
кодировка исходного файла так же должна быть utf-8
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 21:57  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
багреппорт
C++
1
2
3
4
5
6
7
8
 try
{
           j["р.Дніпро(річкова_вода)"] = L"Какой-то текст";
}
catch(exception &ex)
{
            cout << ex.what() << endl;
}
Результат на консоли от функции getJ(), ошибок нету
Миниатюры
Проблема преобразования символов типа wstring в string  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.10.2020, 22:02
Так вы же на сбой в dump, а не в присваивании жаловались. На что жаловались, то в try и вызывайте.
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 22:05  [ТС]
C++
1
2
3
4
5
6
7
8
9
j["р.Дніпро(річкова_вода)"] = L"Какой-то текст";
try
{
          cout << j.dump();
}
catch(exception &ex)
{
          cout << ex.what() << endl;
}
Миниатюры
Проблема преобразования символов типа wstring в string  
0
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 22:07  [ТС]
hoggy, ваше сообщение натолкнуло меня на мысль, может она глупая:
Что объект JSON тоже имеет кодировку ( UTF-16 к примеру ) и я в объект пытаюсь засунуть данные с кодировкой UTF-8. Но в доках библиотеки написано "Only UTF-8"...
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.10.2020, 22:10
Так я и говорю, пишите багреппорт автору библиотеки, показав ему минимальный тестовый пример воспроизводящий ошибку. Здесь никто ошибки внутри dump исправлять не будет.
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 22:12  [ТС]
Renji, я "багреппорт" воспринял как блок try. Сейчас напишу разработчику
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2020, 22:24
Цитата Сообщение от SkYMaaN Посмотреть сообщение
я "багреппорт" воспринял как блок try. Сейчас напишу разработчику
не пиши ничего.
будишь выглядить как идиот.


Цитата Сообщение от Renji Посмотреть сообщение
Никаких проблем с созданием лично я не вижу
либо ты не заметил, что он использует национальные символы прямо в исходном коде.
либо ты просто не в курсе, к каким проблемам это может приводить.

Цитата Сообщение от Renji Посмотреть сообщение
вместо readStr просто L"какой-то текст")
а ещё, ты не в курсе, что nlohmann
Цитата Сообщение от hoggy Посмотреть сообщение
не умеет std::wstring
Цитата Сообщение от Renji Посмотреть сообщение
пишите багреппорт.
нормальные люди сначала разбираются с проблемой собственного понимания сабжа.
в багреппорт пишут только убедившись,
что косяк действительно на стороне библиотеки.


Цитата Сообщение от SkYMaaN Посмотреть сообщение
ваше сообщение натолкнуло меня на мысль, может она глупая:
да. глупая.
nlohmann предполагает, что все его текстовые данные закодированны в utf-8
и судя по этой надписи:
Цитата Сообщение от SkYMaaN Посмотреть сообщение
"Only UTF-8"
ты об этом знаешь.
но при этом, несешь какую то чушь.

на самом деле тебе и не нужно сейчас вникать в нюансы кодировок.
все что от тебя требуется: это осознать,
что на с++ нельзя просто так взять и написать:
C++
1
j["р.Дніпро(річкова_вода)"]
надпись в исходниках:
"р.Дніпро(річкова_вода)" - это неведомая хрень

вот это - юникод:
L"р.Дніпро(річкова_вода)"

вот это - utf8
u8"р.Дніпро(річкова_вода)"

а вот это - неведомая хрень:
"р.Дніпро(річкова_вода)"

моё #21 сообщение должно было наглядно показать тебе,
как можно использовать национальные символы в исходном коде.
тебе нужно было просто посмотреть, и повторить.
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 22:59  [ТС]
[quote="hoggy;14961783"]
C++
1
2
3
4
5
6
7
8
9
10
json j =
    {
            { u8"Найменування_показників", {}},
            { u8"Одиниці_вимірювання", {}},
            { u8"р.Дніпро(річкова_вода)", {}},
            { u8"р.Десна(річкова_вода)", {}},
            { u8"Дніпровська_водопровідна_станція", {}},
            { u8"Деснянська_водопровідная_станція", {}},
    };{ u8"Деснянська_водопровідная_станція", {}},
    };
Ошибка та же при вызове j.dump():
C++
1
JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + sn))
Если вызывать на пустой объект - ничего не выводит.

Добавлено через 10 минут
Ошибся выше.
Ошибок нету, но ничего и не выводит.

Добавлено через 3 минуты
Таблица в UTF-8 не читается вообще
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2020, 23:04
Цитата Сообщение от SkYMaaN Посмотреть сообщение
};{ u8"Деснянська_водопровідная_станція", {}},
    };
ты в состоянии скопировать текст без ошибок?


1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 23:08  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
ты в состоянии скопировать текст без ошибок?
Вполне.
Ваша часть кода в .main у меня как и у вас - работает.
Миниатюры
Проблема преобразования символов типа wstring в string  
0
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
31.10.2020, 23:34  [ТС]
Цитата Сообщение от SkYMaaN Посмотреть сообщение
};
это была опечатка внутри редактора сообщения сайта

Добавлено через 15 минут
hoggy, Ошибку убрал ( надо было закомментировать присвоение данных ).
Но само присвоение не работает.
Вот проект, не посмотрите? ( библиотеки уже внутри и подключены )
https://dropmefiles.com/4h5Ri
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.11.2020, 00:18
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Вот проект, не посмотрите?
1.
никогда не архивируйт публичный проект платным rar.
архивируй при помощи zip.

zip идет в поставке с любой современной осью.

а вот платный rar ещё нужно дополнительно установить в систему.
человек может отказать тебе в помощи просто потому,
что он не станет из-за тебя ничего устанавливать к себе в систему.

2.
твой архив весит 106 МБ (111 603 775 байт)

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

все эти папки: .vs; Debug; Release
автоматически генерируются студией при компиляции.
их не нужно включать в архив.


3.
программа не запускается на машине пользователя.


на самом деле, нужная dll находится в каталоге проекта:
C++
1
excelparser\excelparser\libxl.dll
её нужно скопировать рядышком с excelparser.exe

уважающий себя проект делает это автоматически.
для этого уважающий себя программист должен его соответствующим образом настроить.

4.
результат запуска твоей программы:



и что тебя не устраивает ?

5.
проект не собирается.
ошибки сборки.

причина: настройка проекта выполнена через жопу.


вот например пути для поиска хэдэров:
C:\Users\sasha\source\repos\excelparser\ json-develop\single_include\nlohmann

задан абсолютный путь для юзера Саши.

Саша, ты прежде чем пользоваться Вижуал Студией,
хотя б немножко изучал как ей правильно пользоваццо?

6.
файлы исходного кода в кодировке 1251

я несколько раз специально жирными буквами тебе писал:

Цитата Сообщение от hoggy Посмотреть сообщение
важно:
кодировка исходного файла так же должна быть utf-8
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
01.11.2020, 00:37  [ТС]
Да, я уже со всем разобрался, всё работает. Спасибо.

Добавлено через 2 минуты
Ваши советы не лишены смысла, но желаю вам вести себя более сдержанно, к сожалению я не мог обойтись без вашей помощи и был вынужден терпеть резкие и достаточно неуважительные высказывания в свою сторону.
Цитата Сообщение от hoggy Посмотреть сообщение
изучал как ей правильно пользоваццо?
на уровне ВУЗа
Цитата Сообщение от hoggy Посмотреть сообщение
файлы исходного кода в кодировке 1251
Я видел именно поэтому в папке "таблицы" в директории проэкта есть таблица в utf8. Так же есть путь к uft8 таблице. Ваш код кстати работает и с 1251.

Моя ошибка была довольно глупа, я не закомментировал нерабочий код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2020, 00:37

Отделение символов типа string
Не могли бы вы подсказать методы, строчки кода, которые бы позволили отделить от целевого предложения string, часть которую мне нужно...

В класс Money добавить перегрузку преобразования типа Money в string (и наоборот)
Здравствуйте, необходимо в класс Money добавить перегрузку преобразования типа Money в string (и наоборот). Вроде перегрузку...

Из string в wstring
Как можно получить wstring-строку из string-строки? (символы в строке латинские, поэтому проблем вроде бы возникать не должно)

Проблема с вводом данных типа String с клавиатуры
У меня есть к примеру вот такая часть кода и мне необходимо ввести данные с клавиатуры (несколько слов). Но после того как я записываю...

Смена мест символов в строке типа string
Допустим у меня есть какая-то строка, где есть символы 'A' 'B' и 'C': getline(cin, line); // line - строка типа string, например я ввёл...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru