Как известно, ideone компилирует исходники на Си++ в utf8. Однако, мне нужна строка в utf16 (wstring
). Попытался сконвертировать, но получилось что-то не то (причём конвертация из wstring в utf8 работает верно):
wstring_convert < codecvt_utf8_utf16 <wchar_t>, 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<str.length(); ++q) cout << (int)str[q] << ' ';
cout << endl;
-48 -75 -47 -111 -48 -127 -48 -74 -48 -72 -48 -70 -48 -107 -47 -127 -47 -126
13572 20740 260 13828 14340 14852 5380 16644 16900
но должно было получиться
1077 1105 1025 1078 1080 1082 1045 1089 1090
Вот проверка:
var s = decodeURIComponent(
"-48 -75 -47 -111 -48 -127 -48 -74 -48 -72 -48 -70 -48 -107 -47 -127 -47 -126"
.split(" ").map(x => "%" + (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
Однако, мне нужна строка в 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 <locale>
#include <codecvt>
#include <iostream>
#include <cstdint>
int main() {
std::wstring_convert < std::codecvt_utf8_utf16<char16_t>, 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<str.length(); ++q)
std::cout << (int)str[q] << ' ';
std::cout << '\n';
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В программе предусмотрен ввод ФИОЯ не знаю как реализовать, так, что бы вводилось иванов иван иванович, а на выходе получалось Иванов И
Здраствуйте, как правильно поставить критическую секцию в такой функции?
Работаю над проектом с компилятором MinGW32, компилирую в cmdexe и столкнулся с проблемой: Создал header-файл(UIClass