Как открыть файл с именем UNICODE в Windows? - PullRequest
3 голосов
/ 28 апреля 2010

Существует третья библиотека, принимающая только char * имя файла, например 3rdlib_func_name(char* file_name). Когда я предоставляю имя файла на китайском или японском, все становится не так.

Можно ли как-нибудь сделать так, чтобы эта библиотека открывала UNICODE-имя файла? Программа работает на Windows .

Спасибо за ваш ответ.

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

У нас тоже есть похожая проблема. К счастью, есть решение, хотя оно немного хитрое.

Если файл / каталог уже существует - вы можете использовать функцию GetShortPathName. Результирующее «короткое» имя пути гарантированно не содержит нелатинских символов.

  1. Вызовите GetShortPathNameW (версия в юникоде), чтобы получить "короткую" строку пути.
  2. Преобразовать короткий путь в строку ANSI (используйте WideCharToMultiByte).
  3. Передайте полученную строку ANSI глупой сторонней библиотеке.

Теперь, если файл / каталог еще не существует - вы можете не получить его короткий путь. В таком случае вы должны сначала создать его.

1 голос
/ 28 апреля 2010

Нет, если только вы не сможете перекомпилировать его из модифицированного источника (главное обязательство). Возможно, вам больше повезет с короткими именами из сторонней библиотеки, например AHDF76~4.DOC; эти имена файлов используют ASCII. См. GetShortPathName.

0 голосов
/ 28 апреля 2010

Вы можете попытаться преобразовать строку в локальную кодовую страницу:

setlocale(LC_ALL,"Japanese_Japan.932");
std::string file_name = convert_to_codepage_932(utf16_file_name);
3rdlib_func_name(file_name.c_str());

В противном случае?

Окна обвинения в том, что они не поддерживают UTF-8 ;-)

...