「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
アプリケーションのUnicode対応
GUI †
GUIアプリケーションのUnicode対応
非UnicodeアプリケーションとUnicodeアプリケーション †
古いアプリケーションには、非Unicode対応のGUIアプリケーションが存在する。
- 拡張文字セットを扱うにはアプリケーションのUnicode対応が必要である。
- 非UnicodeアプリケーションではJIS2004の拡張文字セットだけでなく、Shift-JISにない文字は全て入力できない。
- 但し、アプリの画面上で、明確に「?」表示になるので、予期せずJIS2004の拡張文字セットが入力されることもない。
- システムがUnicodeに統一されている場合は、エンコーディングされる箇所を意識する必要がある。
非Unicodeアプリケーション †
- 非Unicodeアプリケーションでは、Shift-JISにない文字の入力ができない(これは、IMEから、ウィンドウ プロシージャ経由でデータを正しく受け取れないため)。
- 例えば、JIS2004で追加された拡張文字セット以外の、Shift-JISにない鱓(ごまめ) という文字を非Unicodeアプリケーションに入力して見ると、この文字も入力できないことが確認できる。
[参考]:CyberLibrarian?(図書館員のコンピュータ基礎講座参考資料) > 参考資料JIS補助漢字(JIS X 0212)
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0212/jisx0212-4.html
・・・ 「鱓」は、JIS90(JIS X 0212)補正漢字
Unicodeアプリケーション †
アプリケーションのUnicode対応の方法
VB †
VC++ †
- アプリケーションのUnicode対応は = ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)のUnicode対応である。
- ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)をUnicode対応させるには、IsWindowUnicode? 関数が True を返すウィンドウを作成する。
- また、IsWindowUnicode?関数が True を返す場合でも、ウィンドウ プロシージャ、メッセージ ループで、メッセージを正しく処理する必要がある。
- ウィンドウ(ウィンドウ プロシージャ、メッセージ ループ)のUnicode対応には、以下が必要である。
- ウィンドウクラスの登録は、RegisterClassW 関数を使用する。
- ウィンドウの作成は
- CreateWindowExA、CreateWindowExW 関数のどちらでも良い。
- ただし、エディット コントロールなどのコモン コントロール類や、
それをサブクラス化したウィンドウの場合は、CreateWindowExW関数を使わなければならない。
- ウィンドウ プロシージャでは DefWindowProcW 関数を使う。
- サブクラス化している場合は、CallWindowProcW 関数を使う。
- メッセージ ループでは、以下の関数を使用する。
- GetMessageW
- DispatchMessageW
- TranslateAcceleratorW
- フロント周りは、ほぼUnicode対応が済んでいる。
- メモ帳
- WWWブラウザなどのアプリケーション
- Office(Word、Excel、Powerpoint)
- 開発環境の標準入力コントロール
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 というコマンドを使用して変換するなどが必要になる。
Tags: :.NET開発, :国際化対応, :文字コード