2

wcstombs3 つの引数があります。

WideCharToMultiByte8 つの引数があります。,</p>

交換方法は?</p>

wcstombsそのように書く方法:

int kk = WideCharToMultiByte(936, 0, szBn, ccBn+1, 0, 0, 0, 0);

wcstombsそのように書く方法:

int kk= WideCharToMultiByte(936,
                            0,
                            szBn,
                            ccBn+1,
                            kkburr,
                            (ccBn+1)*sizeof(wchar_t),
                            0,
                            0)

同じですか?

4

2 に答える 2

3

WideCharToMultiByteとはかなり異なることwcstombsをするので、この置き換えが成功するかどうかは少なくとも多少疑わしいです¹。

具体的には、WCTMBはUTF-16から選択した別の文字セット(およびエンコード)に変換します。wcstombs「ワイド文字列」から「マルチバイト文字列」に変換しますが、標準ではこれらの用語の正確な定義は実装者に任されています。

言い換えると、WCTMBは既知のエンコーディングから別の既知のエンコーディングに変換します。wcstombs不明なエンコーディングから別の不明なエンコーディングに変換します。特に中国語のエンコーディングに変換したい場合は、前者を後者に置き換えることはできません(936はそれではありませんか?)。

この交換をしようとする理由は何ですか?それが何であれ、目標を達成するためのより適切な方法があることはほぼ確実です。

更新:プラットフォームに依存しない信頼性の高いソリューションが必要な場合は、ICUをお勧めします。WCTMBは単に存在しないため、1行の代替品を見つけることを期待しないでください。


¹大規模な控えめな表現

于 2012-05-25T10:20:37.567 に答える
0
  • に変換される結果のエンコーディングwcstombsは、現在のロケールに依存しますWideCharToMultiByteが、コードページを明示的に指定できます。
  • wcstombs「ワイド文字列」から変換します。このエンコーディングは、標準ライブラリの実装によって異なります。WideCharToMultiByteUTF-16の文字列から変換します。wcstombs依存するワイド文字はUTF-16でエンコードされない場合がありますが、Windowsではワイド文字はUTF-16です。
  • wcstombsポータブルですが、そうでWideCharToMultiByteはありません。ターゲットプラットフォームがWindowsのみの場合、それは問題ではありません。
  • WideCharToMultiByteターゲットエンコーディングで表現できない文字の代わりに使用される「デフォルト文字」を指定できます。

したがってWideCharToMultiByte、はるかに強力であり、おそらくのバックエンドとして使用されwcstombsます。

現在のコードページが936でない場合、要求する置換は不可能です。

于 2012-05-25T10:24:03.677 に答える