Есть ли встроенная поддержка UTF в C ++ в Windows?

0

Мне нужно преобразовать некоторые закодированные utf8 числа в поплавки в c++, используя VS2013. Есть ли что-нибудь в стандартной библиотеке или предоставлено заголовками microsoft, которые помогут мне сделать это?

В качестве альтернативы, я слышал, что utf8 должен быть совместим с ASCII, есть ли что-нибудь для этого?

Теги:
encoding

2 ответа

3

Не паникуйте. Для всех цифр и для всех других символов, используемых в плавающих числах, UTF8 совпадает с ASCII.

UTF8 представляет символы Unicode по последовательностям байтов. Эти последовательности имеют переменную длину. Для всех символов Юникода ниже 128 последовательность представляет собой только один байт, содержащий этот символ. Таким образом, для вас нет разницы между UTF8 и ASCII.

Вы можете использовать стандартные методы и игнорировать вход UTF8.

  • 2
    Это все цифры: 0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८ ९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮‌ ૯ ୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩‌ ၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩0123456789 :)
  • 0
    Это очень много - спасибо! Я никогда не знал, что их так много. Я должен признаться, что мой ответ действителен только для самых простых цифр, то есть для первых 10 цифр вашего списка.
Показать ещё 4 комментария
2

Вы можете использовать функцию MultiByteToWideChar WinAPI, ниже приведен пример кода.

int UTF8toUTF16(const CHAR* utf8, WCHAR* utf16) {
    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    if (utf16 == NULL)
        return len;
    if (len>1) {
        return MultiByteToWideChar(CP_UTF8, 0, utf8, -1, utf16, len);
    }
    return 0;
}


const CHAR* utf8str = "someutf8string";

int requiredLen = UTF8toUTF16(utf8str, nullptr);
if (requiredLen > 0) {
    std::vector<WCHAR> utf16str(requiredLen, '\0');
    UTF8toUTF16(utf8str.data(), &utf16str.front());
    // do something with data
}

если ваши цифры равны ASCII, то, конечно, это преобразование ничего не сделает, но если ваше требование говорит, что текст на входе находится в UTF8, тогда для обеспечения безопасности вы должны сделать такое преобразование, по крайней мере, я бы это сделал.

для дальнейшего преобразования смотрите здесь: atoi() с другими языками

Ещё вопросы

Сообщество Overcoder
Наверх
Меню