Попытка конвертировать из char * в wchar_t *, но не работает с не-Engli sh языками - PullRequest
1 голос
/ 04 мая 2020

Я хочу преобразовать строку из char* в wchar_t*, но эта строка, например, на любом языке, кроме английского sh (русский, китайский, арабский c и др. c). Я попытался сделать это следующим образом:

// This is just an example of conversion
const wchar_t * ToWide(const char* mbStr) {
    const size_t cSize = mbstowcs(NULL, mbStr, 0) + 1;
    wchar_t* wc = new wchar_t[cSize];
    mbstowcs(wc, mbStr, cSize);
    return wc;
}

int main() {
    // just the first one is the only that works fine
    wcout << ToWide("Hello");  // (English) The result: Hello
    wcout << ToWide("Привет"); // (Russian) The result: ???????
    wcout << ToWide("你好");    // (Chinese) The result: ??
    wcout << ToWide("مرحبا");   // (Arabic) The result: ع╤═╚╟
}

Почему это произошло и как это можно решить или как правильно преобразовать char * в wchar_t *?

...