Linux — Как записать строку в другой кодировке в объект string в c++? Здравствуйте, cуть вопроса заключается в том, что не получается сравнить две одинаковые строки.
Первая строка (пусть это будет strig s1 = "name") передается от программы FileZilla через сокет, вторая строка прописана ручками (string s2 = "name"). Строки абсолютно одинаковые и при выводе в консоль таким способом: printf("s1 = \'%s\', has size %u, and s2 = \'%s\' has size %u\n", s1.c_str(), (unsigned int)s1.size(), s2.c_str(), (unsigned int)s2.size()); получаю следующее: s1 = 'name', has size 8, and s2 = 'name' has size 4
Строки выводятся в консоль нормально, но размер их явно отличается.
Сравнения строк проводил следующим образом:if(s1 == s2) {
doSomething();
}
иif(strcmp(s1.c_str(), s2.c_str()) == 0) {
doSomething();
}
Кто-нибудь с таким сталкивался? Что можно сделать?
OS: kubuntu 13.10
Спасибо.

21 Авг 2019 в 07:09
205 +1
0
Ответы
1

Проблема, скорее всего, в том, что строки имеют разные кодировки. Возможно, программа FileZilla передает строку в другой кодировке, отличной от той, которую использует ваша программа.

Для того чтобы записать строку в другой кодировке в объект string в C++, можно воспользоваться различными библиотеками, такими как iconv или boost.locale. Например, с помощью библиотеки boost.locale можно записать строку в другой кодировке следующим образом:

#include <boost/locale.hpp>
#include <string>
std::wstring_convert<boost::locale::utf8_codec<wchar_t>> converter;
std::string utf8_string = "name";
std::wstring utf16_string = converter.from_bytes(utf8_string);
std::string s1 = boost::locale::conv::utf_to_utf<char>(utf16_string);

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

std::string s2 = "name";
if (s1 == boost::locale::conv::between(s2, "UTF-8", "UTF-16")) {
doSomething();
}

Надеюсь, это поможет вам решить проблему сравнения строк. Если у вас остались вопросы, не стесняйтесь спрашивать. Удачи!

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 829 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир