WindowsCodePage の実装である NLS ファイルについて。
[23] Windows で実際に CP の情報が入っているのは、 C:\Windows\System(32) にある *.nls というファイルです。 (この名前は OS によって違いますが、いずれも CP 番号が入っています。)
但しそこにあるのは Windows がそれ自体の変換表を持ってる CP だけで、他の CP を加工したものとして実装しているもの (ISO-2022-JP とか) にはこのファイルはありません。
[2] CP の NLS は Windows 9x では CP_*.NLS ですが、 WindowsNT では c_*.nls で名前が違います。
[25] OSR2 には Default で IE 3.02 が入っていましたが、 IE3 は default では International pack なしですのであまり関係ないかもしれません。
[39] アプリケーションの追加と削除で多国語サポートを追加したら、 5つ増えました。
[40] 時刻は全部、 OSR2 を package した時刻なんだと思います。
Windows/4.00.1111 ( B) (Windows 95 OSR2) (486) MSIE/4.70.1155 CP_437 NLS 9,522 96-09-05 11:11 CP_437.NLS CP_850 NLS 9,826 96-09-05 11:11 CP_850.NLS CP_932 NLS 408,546 96-09-05 11:11 CP_932.NLS CP_1252 NLS 9,194 96-09-05 11:11 CP_1252.NLS CP_20866 NLS 6,824 96-09-05 11:11 CP_20866.NLS CP_28592 NLS 5,416 96-09-05 11:11 CP_28592.NLS CP_28593 NLS 5,448 96-09-05 11:11 CP_28593.NLS CP_28594 NLS 5,448 96-09-05 11:11 CP_28594.NLS CP_28597 NLS 5,320 96-09-05 11:11 CP_28597.NLS LOCALE NLS 128,520 96-09-05 11:11 LOCALE.NLS UNICODE NLS 34,676 96-09-05 11:11 UNICODE.NLS CP_1250 NLS 9,124 96-09-05 11:11 CP_1250.NLS CP_1251 NLS 6,868 96-09-05 11:11 CP_1251.NLS CP_1253 NLS 6,856 96-09-05 11:11 CP_1253.NLS CP_1254 NLS 7,708 96-09-05 11:11 CP_1254.NLS CP_1257 NLS 5,960 96-09-05 11:11 CP_1257.NLS
[26] IE5.5 が入っていて生 Win98 ではないです。 WinMe (>>21) と比較すると、 CP_20127.NLS がこちらにはありません。また、 CP437 と CP850 がなぜか >>21 より4日新しい版です。
(なお、 >>21 との日付の微妙な差は dir した環境の時差のせいみたいです。)
[27] >>26 の差異は実際にはないみたいです。 よって、 >>21 と >>26 に両者に存在する NLS の変換表はすべて一致しますた。
[28] >>25 (OSR2) と >>26 の比較の結果、 437, 850, 932 (See WindowsCodePage (>>30)), 28592, 28593, 28594, 28597 で fallback mapping (UCS -> CP) の (>>26 での) 追加がありました。 また、 1252 は WindowsCodePage (>>29) の通り変更が行われていました。
#; Windows/4.10.1998 (Windows 98) (586) #; Internet Explorer: 5.50.4134 CP_1250 NLS 9,956 97-07-31 1:21 CP_1250.NLS CP_1251 NLS 6,926 97-07-31 1:21 CP_1251.NLS CP_1252 NLS 9,938 97-07-31 0:50 CP_1252.NLS CP_1253 NLS 6,888 97-05-31 3:55 CP_1253.NLS CP_1254 NLS 7,708 97-11-04 6:55 CP_1254.NLS CP_1255 NLS 5,940 98-02-10 23:48 CP_1255.NLS CP_1256 NLS 6,640 98-11-20 5:43 CP_1256.NLS CP_1257 NLS 6,112 97-11-05 21:24 CP_1257.NLS CP_1258 NLS 6,004 97-05-31 3:56 CP_1258.NLS CP_1361 NLS 397,474 96-05-23 2:47 CP_1361.NLS CP_20269 NLS 5,736 96-05-23 2:47 CP_20269.NLS CP_20866 NLS 6,824 96-05-23 2:47 CP_20866.NLS CP_21866 NLS 6,824 97-07-24 23:09 CP_21866.NLS CP_28591 NLS 6,312 96-10-09 3:28 CP_28591.NLS CP_28592 NLS 6,312 96-10-09 3:28 CP_28592.NLS CP_28593 NLS 6,376 96-10-09 3:28 CP_28593.NLS CP_28594 NLS 6,312 96-10-09 3:28 CP_28594.NLS CP_28595 NLS 6,568 96-10-09 3:28 CP_28595.NLS CP_28596 NLS 6,696 96-10-09 3:28 CP_28596.NLS CP_28597 NLS 6,536 96-10-09 3:28 CP_28597.NLS CP_28598 NLS 6,568 96-10-09 3:28 CP_28598.NLS CP_28599 NLS 6,312 96-10-09 3:28 CP_28599.NLS CP_28605 NLS 6,344 99-01-05 23:41 CP_28605.NLS CP_437 NLS 8,648 98-06-12 20:01 CP_437.NLS CP_850 NLS 8,648 98-06-12 20:01 CP_850.NLS CP_874 NLS 10,504 98-08-26 2:44 CP_874.NLS CP_932 NLS 407,586 97-09-03 22:35 CP_932.NLS CP_936 NLS 537,858 97-09-12 9:52 CP_936.NLS CP_949 NLS 529,478 96-07-03 2:25 CP_949.NLS CP_950 NLS 486,850 96-10-25 4:58 CP_950.NLS LOCALE NLS 175,338 98-06-12 20:01 LOCALE.NLS UNICODE NLS 34,676 98-06-12 20:01 UNICODE.NLS
C:\WINDOWS\SYSTEM> dir cp*.nls | sort CP_1250 NLS 9,956 97-07-30 16:21 CP_1250.NLS CP_1251 NLS 6,926 97-07-30 16:21 CP_1251.NLS CP_1252 NLS 9,938 97-07-30 15:50 CP_1252.NLS CP_1253 NLS 6,888 97-05-30 18:55 CP_1253.NLS CP_1254 NLS 7,708 97-11-03 21:55 CP_1254.NLS CP_1255 NLS 5,940 98-02-10 14:48 CP_1255.NLS CP_1256 NLS 6,640 98-11-19 20:43 CP_1256.NLS CP_1257 NLS 6,112 97-11-05 12:24 CP_1257.NLS CP_1258 NLS 6,004 97-05-30 18:56 CP_1258.NLS CP_1361 NLS 397,474 96-05-22 17:47 CP_1361.NLS CP_20127 NLS 6,312 00-06-08 17:00 CP_20127.NLS CP_20269 NLS 5,736 96-05-22 17:47 CP_20269.NLS CP_20866 NLS 6,824 96-05-22 17:47 CP_20866.NLS CP_21866 NLS 6,824 97-07-24 14:09 CP_21866.NLS CP_28591 NLS 6,312 96-10-08 18:28 CP_28591.NLS CP_28592 NLS 6,312 96-10-08 18:28 CP_28592.NLS CP_28593 NLS 6,376 96-10-08 18:28 CP_28593.NLS CP_28594 NLS 6,312 96-10-08 18:28 CP_28594.NLS CP_28595 NLS 6,568 96-10-08 18:28 CP_28595.NLS CP_28596 NLS 6,696 96-10-08 18:28 CP_28596.NLS CP_28597 NLS 6,536 96-10-08 18:28 CP_28597.NLS CP_28598 NLS 6,568 96-10-08 18:28 CP_28598.NLS CP_28599 NLS 6,312 96-10-08 18:28 CP_28599.NLS CP_28605 NLS 6,344 99-01-05 14:41 CP_28605.NLS CP_437 NLS 8,648 00-06-08 17:00 CP_437.NLS CP_850 NLS 8,648 00-06-08 17:00 CP_850.NLS CP_874 NLS 10,504 98-08-25 17:44 CP_874.NLS CP_932 NLS 407,586 97-09-03 13:35 CP_932.NLS CP_936 NLS 537,858 97-09-12 0:52 CP_936.NLS CP_949 NLS 529,478 96-07-02 17:25 CP_949.NLS CP_950 NLS 486,850 96-10-24 19:58 CP_950.NLS
[31] >>26 に IE6 SP2 を入れました。 Install の option で **語サポートの選択肢があるのをすべて追加しました。
Windows/4.10.1998 (Windows 98) (586) MSIE/6.0.2800.1106 CP_10004 NLS 5,960 02-11-04 15:00 CP_10004.NLS CP_1250 NLS 9,956 02-11-04 15:00 CP_1250.NLS CP_1251 NLS 6,880 02-11-04 15:00 CP_1251.NLS CP_1252 NLS 9,938 97-07-31 0:50 CP_1252.NLS CP_1253 NLS 6,888 02-11-04 15:00 CP_1253.NLS CP_1254 NLS 7,708 02-11-04 15:00 CP_1254.NLS CP_1255 NLS 5,940 02-11-04 15:00 CP_1255.NLS CP_1256 NLS 6,672 02-11-04 15:00 CP_1256.NLS CP_1257 NLS 6,112 02-11-04 15:00 CP_1257.NLS CP_1258 NLS 6,004 02-11-04 15:00 CP_1258.NLS CP_1361 NLS 397,474 96-05-23 2:47 CP_1361.NLS CP_20269 NLS 5,736 96-05-23 2:47 CP_20269.NLS CP_20866 NLS 6,824 02-11-04 15:00 CP_20866.NLS CP_21866 NLS 6,824 02-11-04 15:00 CP_21866.NLS CP_28591 NLS 6,312 96-10-09 3:28 CP_28591.NLS CP_28592 NLS 6,312 02-11-04 15:00 CP_28592.NLS CP_28593 NLS 6,376 96-10-09 3:28 CP_28593.NLS CP_28594 NLS 6,312 02-11-04 15:00 CP_28594.NLS CP_28595 NLS 6,568 02-11-04 15:00 CP_28595.NLS CP_28596 NLS 6,696 02-11-04 15:00 CP_28596.NLS CP_28597 NLS 6,536 02-11-04 15:00 CP_28597.NLS CP_28598 NLS 6,568 02-11-04 15:00 CP_28598.NLS CP_28599 NLS 6,312 02-11-04 15:00 CP_28599.NLS CP_28605 NLS 6,344 99-01-05 23:41 CP_28605.NLS CP_437 NLS 8,648 98-06-12 20:01 CP_437.NLS CP_708 NLS 5,896 02-11-04 15:00 CP_708.NLS CP_720 NLS 6,216 02-11-04 15:00 CP_720.NLS CP_850 NLS 8,648 98-06-12 20:01 CP_850.NLS CP_852 NLS 8,392 02-11-04 15:00 CP_852.NLS CP_862 NLS 8,712 02-11-04 15:00 CP_862.NLS CP_866 NLS 7,496 02-11-04 15:00 CP_866.NLS CP_874 NLS 10,504 02-11-04 15:00 CP_874.NLS CP_932 NLS 407,586 97-09-03 22:35 CP_932.NLS CP_936 NLS 537,858 97-09-12 9:52 CP_936.NLS CP_949 NLS 529,478 96-07-03 2:25 CP_949.NLS CP_950 NLS 486,850 96-10-25 4:58 CP_950.NLS LOCALE NLS 175,338 98-06-12 20:01 LOCALE.NLS UNICODE NLS 34,676 98-06-12 20:01 UNICODE.NLS
[1] Windows 9x よりも Code Page の NLS 以外の NLS が多いですね...
WindowsNT/5.00.2195 (Service Pack 1) (Windows 2000) (586) MSIE/6.0.2800.1106 2000/08/26 21:00 168 l_except.nls 2000/08/26 21:00 7,046 l_intl.nls 2000/08/26 21:00 7,070 ctype.nls 2000/08/26 21:00 13,696 sorttbls.nls 2000/08/26 21:00 28,288 xjis.nls 2000/08/26 21:00 47,066 ksc.nls 2000/08/26 21:00 66,082 c_037.nls 2000/08/26 21:00 66,082 c_10000.nls 2000/08/26 21:00 66,082 c_10079.nls 2000/08/26 21:00 66,082 c_1026.nls 2000/08/26 21:00 66,082 c_1250.nls 2000/08/26 21:00 66,082 c_1251.nls 2000/08/26 21:00 66,082 c_1252.nls 2000/08/26 21:00 66,082 c_1253.nls 2000/08/26 21:00 66,082 c_1254.nls 2000/08/26 21:00 66,082 c_1255.nls 2000/08/26 21:00 66,082 c_1256.nls 2000/08/26 21:00 66,082 c_1257.nls 2000/08/26 21:00 66,082 c_1258.nls 2000/08/26 21:00 66,082 c_20127.nls 2000/08/26 21:00 66,082 c_20290.nls 2000/08/26 21:00 66,082 c_20866.nls 2000/08/26 21:00 66,082 c_20905.nls 2000/08/26 21:00 66,082 c_21027.nls 2000/08/26 21:00 66,082 c_21866.nls 2000/08/26 21:00 66,082 c_28591.nls 2000/08/26 21:00 66,082 c_28592.nls 2000/08/26 21:00 66,082 c_28593.nls 2000/08/26 21:00 66,082 c_28598.nls 2000/08/26 21:00 66,082 c_28605.nls 2000/08/26 21:00 66,082 c_500.nls 2000/08/26 21:00 66,594 c_437.nls 2000/08/26 21:00 66,594 c_775.nls 2000/08/26 21:00 66,594 c_850.nls 2000/08/26 21:00 66,594 c_860.nls 2000/08/26 21:00 66,594 c_861.nls 2000/08/26 21:00 66,594 c_863.nls 2000/08/26 21:00 66,594 c_865.nls 2000/08/26 21:00 66,594 c_874.nls 2000/08/26 21:00 66,728 big5.nls 2000/08/26 21:00 82,172 bopomofo.nls 2000/08/26 21:00 83,748 prc.nls 2000/08/26 21:00 83,748 prcp.nls 2000/08/26 21:00 89,588 unicode.nls 2000/08/26 21:00 139,810 c_20261.nls 2000/08/26 21:00 162,850 c_10001.nls 2000/08/26 21:00 162,850 c_932.nls 2000/08/26 21:00 173,602 c_20936.nls 2000/08/26 21:00 177,698 c_20949.nls 2000/08/26 21:00 180,258 c_20000.nls 2000/08/26 21:00 180,770 c_20932.nls 2000/08/26 21:00 192,236 locale.nls 2000/08/26 21:00 196,642 c_936.nls 2000/08/26 21:00 196,642 c_949.nls 2000/08/26 21:00 196,642 c_950.nls 2000/08/26 21:00 262,148 sortkey.nls
FULLWIDTH
-> 0xXX が追加されているのと、 CP9xx とかで EURO SIGN
とかの追加があるのが大きな変化。WindowsNT/5.01.2600 (Service Pack 1) (Windows XP) (586) MSIE/6.0.2800.1106 2001/08/28 21:00 168 l_except.nls 2001/08/28 21:00 7,046 l_intl.nls 2001/08/28 21:00 8,386 ctype.nls 2001/08/28 21:00 21,116 sorttbls.nls 2001/08/28 21:00 24,772 geo.nls 2001/08/28 21:00 28,288 xjis.nls 2001/08/28 21:00 47,066 ksc.nls 2001/08/28 21:00 66,082 C_28594.NLS 2001/08/28 21:00 66,082 C_28595.NLS 2001/08/28 21:00 66,082 C_28597.NLS 2001/08/28 21:00 66,082 c_037.nls 2001/08/28 21:00 66,082 c_10000.nls 2001/08/28 21:00 66,082 c_10006.nls 2001/08/28 21:00 66,082 c_10007.nls 2001/08/28 21:00 66,082 c_10010.nls 2001/08/28 21:00 66,082 c_10017.nls 2001/08/28 21:00 66,082 c_10029.nls 2001/08/28 21:00 66,082 c_10079.nls 2001/08/28 21:00 66,082 c_10081.nls 2001/08/28 21:00 66,082 c_10082.nls 2001/08/28 21:00 66,082 c_1026.nls 2001/08/28 21:00 66,082 c_1250.nls 2001/08/28 21:00 66,082 c_1251.nls 2001/08/28 21:00 66,082 c_1252.nls 2001/08/28 21:00 66,082 c_1253.nls 2001/08/28 21:00 66,082 c_1254.nls 2001/08/28 21:00 66,082 c_1255.nls 2001/08/28 21:00 66,082 c_1256.nls 2001/08/28 21:00 66,082 c_1257.nls 2001/08/28 21:00 66,082 c_1258.nls 2001/08/28 21:00 66,082 c_20127.nls 2001/08/28 21:00 66,082 c_20290.nls 2001/08/28 21:00 66,082 c_20866.nls 2001/08/28 21:00 66,082 c_20905.nls 2001/08/28 21:00 66,082 c_21027.nls 2001/08/28 21:00 66,082 c_21866.nls 2001/08/28 21:00 66,082 c_28591.nls 2001/08/28 21:00 66,082 c_28592.nls 2001/08/28 21:00 66,082 c_28593.nls 2001/08/28 21:00 66,082 c_28598.nls 2001/08/28 21:00 66,082 c_28599.nls 2001/08/28 21:00 66,082 c_28605.nls 2001/08/28 21:00 66,082 c_500.nls 2001/08/28 21:00 66,082 c_875.nls 2001/08/28 21:00 66,594 c_437.nls 2001/08/28 21:00 66,594 c_737.nls 2001/08/28 21:00 66,594 c_775.nls 2001/08/28 21:00 66,594 c_850.nls 2001/08/28 21:00 66,594 c_852.nls 2001/08/28 21:00 66,594 c_855.nls 2001/08/28 21:00 66,594 c_857.nls 2001/08/28 21:00 66,594 c_860.nls 2001/08/28 21:00 66,594 c_861.nls 2001/08/28 21:00 66,594 c_863.nls 2001/08/28 21:00 66,594 c_865.nls 2001/08/28 21:00 66,594 c_866.nls 2001/08/28 21:00 66,594 c_869.nls 2001/08/28 21:00 66,594 c_874.nls 2001/08/28 21:00 66,728 big5.nls 2001/08/28 21:00 82,172 bopomofo.nls 2001/08/28 21:00 83,748 prc.nls 2001/08/28 21:00 83,748 prcp.nls 2001/08/28 21:00 89,588 unicode.nls 2001/08/28 21:00 139,810 c_20261.nls 2001/08/28 21:00 162,850 c_10001.nls 2001/08/28 21:00 162,850 c_932.nls 2001/08/28 21:00 173,602 c_10008.nls 2001/08/28 21:00 173,602 c_20936.nls 2001/08/28 21:00 177,698 c_10003.nls 2001/08/28 21:00 177,698 c_20949.nls 2001/08/28 21:00 180,258 c_20000.nls 2001/08/28 21:00 180,770 c_20932.nls 2001/08/28 21:00 189,986 c_1361.nls 2001/08/28 21:00 195,618 c_10002.nls 2001/08/28 21:00 196,642 c_936.nls 2001/08/28 21:00 196,642 c_949.nls 2001/08/28 21:00 196,642 c_950.nls 2001/08/28 21:00 262,148 sortkey.nls 2002/04/10 10:17 209,010 locale.nls 2002/04/20 10:20 66,082 c_28603.nls
winapi2tbl.pl
がうまく動かなかったです。)[32] 次の script を実行した結果できる nls-list.txt の内容を、 >>25->>31 のように貼り付けてください。
なお、この script はWindozeの版を調べるおよび版を調べる:InternetExplorer のために Message::Field::UA <http://suika.fam.cx/gate/cvs/perl/lib/Message/Field/UA.pm> を使っています。 (M::F::UA が使っている Message::Field::Structured, Message::Util, Message::MIME::Charset, Message::MIME::Charset::MinName も最低限必要になります。)
(Windoze と Internet Explorer の版を手動で書き入れる場合は、下記 script 中の $ua に関係する部分を削除してください。)
#!/usr/bin/perl use strict; my @lst; push @lst, `command /c dir c:\\windows\\system\\*.nls`; push @lst, `cmd /c dir c:\\winnt\\system32\\*.nls`; push @lst, `cmd /c dir c:\\windows\\system32\\*.nls`; @lst = sort grep /NLS/i, @lst; open LST, '>nls-list.txt'; # require Message::Field::UA; my $ua = new Message::Field::UA; $ua->add_our_name; $ua->replace_system_version ('ie', -prepend => 0); print LST $ua."\n"; # print LST join /\n/, @lst; close LST; open BAT, '>mktbls.bat'; for (@lst) { print BAT "perl winapi2tbl.pl $1 > win95-cp$1.tbl\n" if /(\d+)/; } close BAT;