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 Спасибо.
Проблема, скорее всего, в том, что строки имеют разные кодировки. Возможно, программа FileZilla передает строку в другой кодировке, отличной от той, которую использует ваша программа.
Для того чтобы записать строку в другой кодировке в объект string в C++, можно воспользоваться различными библиотеками, такими как iconv или boost.locale. Например, с помощью библиотеки boost.locale можно записать строку в другой кодировке следующим образом:
Проблема, скорее всего, в том, что строки имеют разные кодировки. Возможно, программа 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();
}
Надеюсь, это поможет вам решить проблему сравнения строк. Если у вас остались вопросы, не стесняйтесь спрашивать. Удачи!