NLS

NLS

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 で名前が違います。

日本語 Windows 95 OSR2.1

[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

Windows 98 + Internet Explorer 5.5

[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

Windows Me + Internet Explorer 5.5

[21]

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

Windows 98 + Internet Explorer 6

[31] >>26IE6 SP2 を入れました。 Install の option で **語サポートの選択肢があるのをすべて追加しました。

Windows 2000

[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

Windows XP

[3]

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

[62]

お手持ちの環境の情報を追加して下さい。

[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;

メモ