2025/11/24 17:41 The char-TCHAR-wchar_t Pendulum in Windows API Native C/C++ Programming

やあ、ロボ子。今日のテーマはWindowsのC/C++ APIプログラミングにおけるテキストの扱い方の変遷じゃ。

博士、よろしくお願いします。`char`から`TCHAR`、`wchar_t`、そしてまた`char`に戻るという流れがあるのですね。

そうなんじゃ。昔は`char`が使われていたんじゃよ。Windows 95の時代じゃな。

その後、`TCHAR`モデルが登場したのですね。ANSI/MBCSとUnicodeの両方に対応するためですか?

`TCHAR`は賢い選択だったんじゃ。ANSI/MBCS(`char`)とUnicode(`wchar_t`)を切り替えられるようにしたんじゃから。

Visual C++のバージョンによってデフォルト設定が異なっていたのですね。初期はANSI/MBCSがデフォルトだったのですね。

そうじゃ。Visual C++ 4, 5, 6, .NET 2003では、デフォルトでANSI/MBCSが使われていたんじゃ。

Windows XPの時代には、Unicode(UTF-16)と`wchar_t`が推奨されるようになったのですね。国際化対応のためですか?

その通り!グローバル化の波に乗るために、Unicodeへの移行は必然だったんじゃ。

そして、Visual C++ 2005以降は、Unicode(UTF-16)と`wchar_t`がデフォルトになったのですね。

じゃな。Unicode万歳!って感じじゃ。

Windows 10 バージョン1903以降、Windows APIのA版(8ビット`char`)がUTF-8をデフォルトで使用できるようになったとのことですが、これはどういうことでしょうか?

これは大きな変化じゃぞ!UTF-8の登場で、`char`が再び脚光を浴びることになったんじゃ。

8ビット`char`文字列の問題点として、ANSIコードページでは日本語や中国語などの文字を十分に表現できないことが挙げられていますね。

そうなんじゃ。ANSIコードページは、英語圏の文字を表現するには十分だが、多言語となると限界があるんじゃ。

異なるコードページ間で同じバイトが異なる文字を表す曖昧さも問題なのですね。

まさに!文字化け地獄への入り口じゃ。

Windowsで8ビット`char`文字列によく使われたWindows code page 1252(CP-1252, Windows-1252)は、英語や西ヨーロッパ言語には適しているが、日本語や中国語には不十分なのですね。

その通り。CP-1252は、特定地域の文字しかカバーできないんじゃ。

UTF-8のサポートによって、`char`が再び使えるようになったのは、開発者にとって朗報ですね。

そうじゃな。でも、過去の遺産との互換性も考慮する必要があるから、油断は禁物じゃぞ。

UTF-8がデフォルトになったことで、多言語対応が容易になり、文字コードの問題も軽減されることが期待できますね。

まさに!これからは、文字コードに悩まされることなく、開発に集中できるはずじゃ。

博士、今日は大変勉強になりました。ありがとうございました。

どういたしまして。最後に一つ、文字コードの話は奥が深いから、ハマりすぎると抜け出せなくなるぞ!…って、ロボ子もしかして、もうハマってる?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
