4

char* ファイル名のみを受け入れる 3 番目の lib があります3rdlib_func_name(char* file_name)。中国語または日本語でファイル名を指定すると、すべてがうまくいきません。

この lib を UNICODE ファイル名で開く方法はありますか? プログラムはWindowsで実行されています。

お返事をありがとうございます。

4

3 に答える 3

4

私たちも同様の問題を抱えています。幸いなことに解決策がありますが、それは少しトリッキーです。

ファイル/ディレクトリが既に存在する場合 -GetShortPathName関数を使用できます。結果の「短い」パス名には、非ラテン文字が含まれていないことが保証されています。

  1. (unicode バージョン) を呼び出しGetShortPathNameWて、「短い」パス文字列を取得します。
  2. 短いパスを ANSI 文字列に変換します ( を使用WideCharToMultiByte)。
  3. 結果のANSI文字列を愚かなサードパーティのライブラリに渡します。

ここで、ファイル/ディレクトリがまだ存在しない場合、短いパス名を取得できない可能性があります。そのような場合は、最初に作成する必要があります。

于 2010-04-29T08:17:48.613 に答える
1

いいえ、変更されたソースから再コンパイルできない限り、ありません (主要な作業です)。のような短いファイル名をサードパーティのライブラリに入力すると、うまくいくかもしれませんAHDF76~4.DOC。これらのファイル名は ASCII を使用します。を参照してくださいGetShortPathName

于 2010-04-28T13:37:11.247 に答える
0

文字列をローカル コード ページに変換してみてください。

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 をサポートしていないのはウィンドウのせい;-)

于 2010-04-28T16:06:55.487 に答える