日本語のフォルダ名を持っています。CFileDialog getpathNameis
フォルダが選択されたときにいくつかの疑問符を返します。それを解決する方法はありますか?
1 に答える
アプリがUnicodeサポートではなくMBCSサポートを使用してビルドされている場合、日本語パスは、「非Unicodeプログラムの言語」(別名システムロケール)が日本語に設定されている場合にのみ正しく処理されます。これは、日本語ユーザーの場合ですが、あなたが日本人でないなら、あなたには当てはまらないかもしれません。
システムロケールが日本語でない場合、パスはによって返される前にコードページに変換されますGetPathName()
。置換(?)文字またはゴミが含まれます。ほとんどの場合、両方の組み合わせです。
利用可能ないくつかの可能性があります:
何もしないでください。あなたのアプリは、日本人のほとんどのユーザーにとってうまく機能するはずです。か否か...
日本語のコードページでアプリをテストします。これを行うには、Unicode以外のプログラムの言語を一時的に変更するか(再起動が必要)、(はるかに簡単に)AppLocaleでアプリをテストします。(注:はい、Windows 7では正常に動作します。問題が発生した場合は、この記事が役立つ場合があります)。
Unicodeに切り替えます。コードベースのサイズによっては、これは主に入力と出力、および
_T("blah")
コードで文字列リテラルを使用するかどうかによっては、非常に面倒な作業になる可能性があります。もちろん、それにはもっと多くの側面がありますが、これらの側面が最も重要です。ところで、すべての新しいプロジェクトは、Unicodeサポートを念頭に置いて実行する必要があります。このパスの問題を具体的に処理します。ファイルダイアログについて話しているので、ダイアログ全体をUnicodeとして開く必要があります。つまり、単純にではなく、基盤となるWin32APIのUnicodeバージョンを明示的に呼び出す必要があるでしょう
CFileDialog
。それほど複雑ではありませんが、リスクは、最初の問題を連続して解決しているだけであるということです。日本語のパスを正しく取得したら、ユーザーが入力した日本語のテキストを処理する必要があります...したがって、このソリューションは適切ではないと思います。
解決策#2は、確かに小さな問題を特定するための最も迅速な方法です。解決策#3は、長期的に見て確実に最良の解決策です。ただし、既存のアプリでは面倒な場合があるため、実際に必要であることを確認してください。