Страницы

Поиск по вопросам

пятница, 6 марта 2020 г.

Проблемы с кодировкой на ideone

#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

Комментариев нет:

Отправить комментарий