Encoding (UnicodeString, wchar_t)



  • Ich benutze immer durchgänging std::string... everywhere mit impliziter utf8 Bedeutung.

    Nun muss ich allerdings UnicodeStrings und wchar_t const* strings aus windows Funktionen immer rüberkopieren, was für mich in Ordnung ist. Ich werde nicht auf wstring umstellen. (Ich verwende eine Batzillion eigener git repos, die alle nur utf8 können)

    Ist ein UnicodeString UTF16 oder UCS2, oder was anderes?
    Ist ein wchar_t const* aus einem Systemcall UTF16 oder UCS2?

    wchar_t const* wstr = /*...*/; // UnicodeString::c_str(), oder aus zb GetModuleFileName(...)
    
    std::wstring_convert <std::codecvt_utf8_utf16 <wchar_t>, wchar_t> converter;
    return converter.to_bytes(wstr); // -> std::string
    

    oder

    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t>;
    return converter.to_bytes(wstr); // -> std::string
    

    ?

    Ich finde das immer total verwirrend, wenn ich mich mit sowas auseinandersetzen muss in Windows.



  • 5cript schrieb:

    Ist ein UnicodeString UTF16 oder UCS2, oder was anderes?

    UTF-16.

    5cript schrieb:

    Ist ein wchar_t const* aus einem Systemcall UTF16 oder UCS2?

    UTF-16.

    Wenn du eh einen UnicodeString hast, nimm doch UTF8String zum Umwandeln:

    String s = ...; // String == UnicodeString
    std::string u8s = UTF8String(s).c_str();
    


  • top 👍


Log in to reply