UTF-8 в Windows

26
задан chills42 5 November 2008 в 14:01
поделиться

2 ответа

К сожалению, нет никакого способа сделать Unicode текущей кодовой страницей в Windows. CP_UTF7 и CP_UTF8 константы являются псевдокодовыми страницами, используемыми только в MultiByteToWideChar и , функции преобразования WideCharToMultiByte , как Ben упомянули.

Ваша проблема подобна тому из fstream классов C++. fstream конструкторы принимают [только 112] имена, делая невозможным открыть файл с истинным именем Unicode. Единственным решением, предлагаемым VC, был взлом: откройте файл отдельно и затем установите дескриптор на потоковый объект. Я боюсь, что это не опция для Вас, конечно, так как сторонняя библиотека, вероятно, не принимает дескрипторы.

единственное решение, о котором я могу думать, состоит в том, чтобы создать временный файл с именем не-Unicode, которое трудно связано с оригиналом, и используйте это в качестве параметра.

26
ответ дан Josh Kelley 5 November 2008 в 14:01
поделиться
  • 1
    каков будет imageResource? Это будет imagepath как /sdcard/images/image1.jpg? – Narendra Singh 24 November 2015 в 10:20

Весь Windows APIs думает в UTF-16, таким образом, Вы - более обеспеченная запись обертки вокруг Вашей библиотеки, которая преобразовывает на границах.

Достаточно странно, Windows думает, что UTF-8 является кодовой страницей в целях преобразования, таким образом, Вы используете те же API, как Вы были бы для преобразования между кодовыми страницами:

std::wstring Utf8ToUtf16(const char* u8string)
{
    int wcharcount = strlen(u8string);
    wchar_t *tempWstr = new wchar_t[wcharcount];
    MultiByteToWideChar(CP_UTF8, 0, u8string, -1, tempWstr, wcharcount);
    wstring w(tempWstr);
    delete [] tempWstr;
    return w;
}

И что-то вроде подобной формы для преобразования назад.

10
ответ дан Ben Straub 5 November 2008 в 14:01
поделиться
  • 1
    Вы используете это соглашение для других языков, также? Как PHP? – Tower 10 July 2010 в 10:56
Другие вопросы по тегам:

Похожие вопросы: