umqの日記: NLS って難しい(6) 1
日記 by
umq
# すでに NLS とは違う話題になってるような気もするが……
Mlang.dll の関数を使えば 51932 へのコンバートが可能ではないだろうか,という話の続き。
ConvertINetString() を使って変換可能かどうか,について判別する IsConvertINetStringAvailable() という関数がある。
これを使って変換可能性を調べた。
調査に使用したのは以下の各コードページ。
- 437: OEM - United States
- 932: ANSI/OEM - Japanese Shift-JIS
- 1252: ANSI - Latin I
- 20932: JIS X 0208-1990 & 0212-1990
- 50220: 日本語 (JIS)
- 50221: 日本語 (JIS 1 バイト カタカナ可)
- 50221: 日本語 (JIS 1 バイト カタカナ可 - SO/SI)
- 50932: 日本語 (自動判別)
- 65000: UTF-7
- 65001: UTF-8
結果,わかったことは以下の通り
- 同一コードページ同士の変換(?)は常に可能
- UTF-7(65000), UTF-8(65001) と任意のコードページの相互変換は常に可能
- 437 と 20932 は相互変換可能(!)
- 932 と 20932 は変換不可(!)
- 932 と 50220, 50221, 50222, 50932, 51932 の各コードページは相互変換可能
- 20932, 50220, 50221, 50222, 50932, 51932 の任意の異なる2つの組み合わせでは、変換不可
……なかなか興味深い結果だと思う
[ひとつまえ]
NLS って難しい(6) (スコア:1)
CP_OEMCP(1) や CP_ACP(0) はサポートされない。呼び出し側でこれらが具体的にどのページ番号にマップされているかを解決しておく必要がある。