4

引数LPWSTRをLPTSTRに変換しようとしていますが、文字列を簡単に変換するために使用できるライブラリはありますか?

4

2 に答える 2

7

が定義されている場合_UNICODE、実行する変換はありません-aTCHAR は、WCHARであり、LPWSTRLPTSTR;です。それ以外の場合TCHARは、、CHARおよびLPTSTRですLPSTR。この最後のケースでは、WideCharToMultiByte APIを使用して、LPWSTR(つまり、Unicode文字列)を「狭い」文字列に変換できます。

また、 WindowsタイプとCタイプへのマップ(VC ++の場合は確かにそうです)、および現在のCロケールが変換に使用する予定のロケールであるとwcstombs想定して、Cライブラリ関数を使用できます。CHARWCHARcharwchar_t


この問題に関する詳細については、 Alfのコメントも参照してください。最も重要な点は、出力エンコーディングは一般に入力を忠実に表すことができないため、可能であればそのような変換を避ける必要があるということです。テキストが文字化けしているだけでなく、必要なファイルが見つからないか、さらに悪いことに、間違ったパスで動作していることを意味します。

したがって、(@ prazuberの回答のように)Unicodeを使用するようにプロジェクトを設定し、この種の変換を回避するために、常にUnicode対応のAPIを使用するようにしてください。

それでも、Windows APIのUnicodeバージョンのみを使用すると、Windows9xとの互換性が失われる可能性があることに注意してください。これはほとんどの場合問題ではありませんが、アプリケーションでそのようなOSをサポートすることが重要な場合は、使用しているAPIがMSLUでサポートされているかどうかを確認してください。

于 2012-12-16T16:58:59.427 に答える
2

LPTSTRは次のように定義されます。

#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif

したがって、必要なのは文字セットをUnicodeに切り替えることだけです。たとえば、Visual Studioでは、 [構成のプロパティ] ->[一般] ->[文字セット] ->[ Unicode文字セットの使用]に移動します。

于 2012-12-16T16:51:57.497 に答える