What are the disadvantages to not using Unicode on Windows?
By Unicode, I mean WCHAR
and the wide API functions. (CreateWindowW, MessageBoxW, and so on)
What problems could I run into by not using this?
Your code won't be able to deal correctly with characters outside the currently selected codepage when dealing with system APIs1.
Typical problems include unsupported characters being translated to question marks, inability to process text with special characters, in particular files with "strange characters" in their names/paths.
Also, several newer APIs are present only in the "wide" version.
Finally, each API call involving text will be marginally slower, since the "A
" versions of APIs are normally just thin wrappers around the "W
" APIs, that convert the parameters to UTF-16 on the fly - so, you have some overhead in respect to a "plain" W
call.
A
" APIs don't speak UTF-8, so you'd have to convert to UTF-16 and call the W
versions anyway.元の質問の要点は、「すべてのWindowsアプリを「#define_UNICODE」でコンパイルする必要がありますが、そうでない場合の欠点は何ですか?」だったと思います。
私の最初の返事は、「そうだね。8ビットASCIIを移動した。最近のWindowsコードでは、「_UNICODE」が妥当なデフォルトである」というものでした。
Windowsの場合でも、それはかなり良いアドバイスだと思います。しかし、元の返信を削除しました。自分のリンクを読み直すまで、「UTF-16は非常に悲しい状況である」(Matteo Italiaが雄弁に言っているように)ことに気づかなかったからです。
例えば:
Microsoftは、「UCS-2」と「UTF-16」の同義語として「Unicode」と「widechar」を誤って使用しています。さらに、UTF-8はナローストリングWinAPIのエンコーディングとして設定できないため、コードを_MBCSではなく_UNICODEでコンパイルする必要があります。Windows C ++プログラマーは、Unicodeは「widechars」で実行する必要があることを学んでいます。この混乱の結果として、彼らは現在、テキストに対して何をするのが正しいかについて最も混乱しているものの1つです。
私はこれらの3つのリンクを心からお勧めします:
私見では...