Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
アプリケーションのUnicode対応
GUI †
GUIアプリケーションのUnicode対応
非UnicodeアプリケーションとUnicodeアプリケーション †
古いアプリケーションには、非Unicode対応のGUIアプリケーションが存在する。
- 拡張文字セットを扱うにはアプリケーションのUnicode対応が必要である。
- 非UnicodeアプリケーションではJIS2004の拡張文字セットだけでなく、Shift-JISにない文字は全て入力できない。
- 但し、アプリの画面上で、明確に「?」表示になるので、予期せずJIS2004の拡張文字セットが入力されることもない。
非Unicodeアプリケーション †
- 非Unicodeアプリケーションでは、Shift-JISにない文字の入力ができない(これは、IMEから、ウィンドウ プロシージャ経由でデータを正しく受け取れないため)。
- 例えば、JIS2004で追加された拡張文字セット以外の、Shift-JISにない鱓(ごまめ) という文字をサクラ エディタに入力して見ると、この文字も入力できないことが確認できる。
[参考]:CyberLibrarian?(図書館員のコンピュータ基礎講座参考資料) > 参考資料JIS補助漢字(JIS X 0212)
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0212/jisx0212-4.html
・・・ 「鱓」は、JIS90(JIS X 0212)補正漢字
Unicodeアプリケーション †
アプリケーションのUnicode対応の方法
- VC++
アプリケーションのUnicode対応は = ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)のUnicode対応である。
ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)をUnicode対応させるには、IsWindowUnicode? 関数が True を返すウィンドウを作成する。
また、IsWindowUnicode?関数が True を返す場合でも、ウィンドウ プロシージャ、メッセージ ループで、メッセージを正しく処理する必要がある。
ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)のUnicode対応には、以下が必要である。
- ウィンドウクラスの登録は、RegisterClassW 関数を使用する。
- ウィンドウの作成はCreateWindowExA、CreateWindowExW 関数のどちらでも良い。
ただし、エディット コントロールなどのコモン コントロール類や、
それをサブクラス化したウィンドウの場合は、CreateWindowExW関数を使わなければならない。
- ウィンドウ プロシージャでは DefWindowProcW 関数を使う。
- サブクラス化している場合は、CallWindowProcW 関数を使う。
- メッセージ ループでは、GetMessageW 、DispatchMessageW 、TranslateAcceleratorW 関数を使用する。
メモ帳、Office(Word、Excel、Powerpoint)、WWWブラウザなどのアプリケーションや、開発環境の標準入力コントロールなど(フロント周り)は、ほぼUnicode対応が済んでいる。
CUI †
CMD †
FTPをコマンドで実行した所、文字化けしたという話がありましたが、
コマンド・プロンプト(CMD)がSJISアプリケーションとして動作しているためです。
コマンド・プロンプト(CMD)は、
cmd /u その他コマンドライン引数
でUnicode対応します。
それ以外はSJISです(日本のロケールでは)
#日本語以外では各国のロケールの既定の文字コード。
↓のコマンドを /u 有り・無しで起動したコマンド・プロンプト(CMD)から実行テストすると解ります。
C:\Users\daisukenishino>echo 鱓 > aa.txt
鱓(ごまめ)は、Unicodeにしか無い文字。
(UnicodeでおBOM無しで出力されるためサクラエディタなどから開いて下さい)
FTP †
FTPは、転送モード(asciiまたはbinary)があり、
転送モード:asciiでは、自動エンコーディングするので、
設定で回避 †
文字化けが発生する場合は、設定などで回避する必要がある。
サーバ側でエンコード †
エンコーディングの指定は無いようなので、
ファイル名などの文字化けなどが発生した場合、
convmv というコマンドを使用して変換するなどが必要になる。