#cpp #кодировка #ideone
Как известно, ideone компилирует исходники на Си++ в utf8. Однако, мне нужна строка в utf16 (wstring). Попытался сконвертировать, но получилось что-то не то (причём конвертация из wstring в utf8 работает верно): wstring_convert < codecvt_utf8_utf16, wchar_t> convert; const char *s = "еёЁжикЕст"; wstring str = convert.from_bytes(s); for (int q=0; s[q]; ++q) cout << (int)s[q] << ' '; cout << endl; for (int q=0; q "%" + (x & 255).toString(16)).join("") ) console.log(s) console.log(s.split("").map(ch => ch.charCodeAt(0)).join(" ")) К тому же, если сделать wchar_t bin[] = {1077, 1105, 1025, 1078, 1080, 1082, 1045, 1089, 1090, 0}; str = bin; cout << convert.to_bytes(str.c_str()) << endl; то вывод верный. Код полностью: http://ideone.com/ut7Nsg
Ответы
Ответ 1
Однако, мне нужна строка в utf16 (wstring). Это неверно, кодировка std::wstring в стандарте не указана, на Windwows/MSVC sizeof(wchar_t) 2, и там кодировка utf-16, на Linux/gcc sizeof(wchar_t) 4 и кодировка utf-32, ideone использует gcc, отсюда очевидные проблемы, переносимый способ получить код в utf-16 (c++11): #include#include #include #include int main() { std::wstring_convert < std::codecvt_utf8_utf16 , char16_t> convert; const char *s = "еёЁжикЕст"; std::cout << "Input: " << s << "\n"; std::u16string str = convert.from_bytes(s); for (int q=0; s[q]; ++q) std::cout << (int)s[q] << ' '; std::cout << '\n'; for (int q=0; q
Комментариев нет:
Отправить комментарий