Windowsコードページ

コードページ (文字コード)

[9] コードページ (codepage) は、 MicrosoftIBM のシステムにおける文字コード群 (の識別子) です。

一覧

[7] あんまりあてにしないで下さい。 まとまった情報が (特に M$ については) ないんでこまります。

NoMicrosoftIBMmisc
424(EBCDIC)
CP437MS-DOS US (OEM)DOS US
CP708ASMO 708 (OEM)
CP709ASMO 449+, BCON V4 (OEM)
CP710Transparent Arabic (OEM)
CP720Transparent ASMO (OEM)
CP737Greek (旧437G) (OEM)Greek
CP775バルト語 (OEM)
813ISO/IEC8859-7ISO/IEC8859-7
838
CP850MS-DOS 多言語 (Latin I) (OEM)?
CP852MS-DOS スラブ語 (Latin II) (OEM)
CP855IBM キリル語 (OEM)
CP857IBM トルコ語 (OEM)
CP860MS-DOS ポルトガル語 (OEM)
CP861MS-DOS アイスランド語 (OEM)
CP862MS-DOS ヘブライ語 (OEM)IBM 862
CP863MS-DOS カナダ系フランス語 (OEM)
CP864アラビア語 (OEM)IBM 864
CP865MS-DOS 北欧語 (OEM)
CP866MS-DOS ロシア語 (OEM)IBM 866
CP869IBM 現代ギリシャ語 (OEM)
CP874タイ語 (TIS 620 のようなもの、改訂あり) (OEM / ANSI)TIS 620
875X-EBCDIC-GreekModern
912ISO/IEC8859-2
913ISO/IEC8859-3
914ISO/IEC8859-4
915ISO/IEC8859-5
916ISO/IEC8859-8
920ISO/IEC8859-9
921
922
923ISO/IEC8859-15
930
CP932日本語 (マイクロソフト標準キャラクタセット) (OEM / ANSI)
935
CP936中国語 (簡体字) (GBK、改訂あり) (OEM / ANSI)
939
942IBM 942
943シフトJIS
CP949韓国語 (UHC、改訂あり)KS X 1001 完成型
CP950中国語 (伝統字) (Big5 の一種、改訂あり) (OEM / ANSI)Big5-euro
951? Big5-HKSCS
964EUC-TW
970EUC-KR
1004Windows-1252 -euro
1006
1025
1046
1089? ISO/IEC8859-6
1097
1098
1112
1122
1123
1124
1140X-EBCDIC-US-EURO(EBCDIC)
1141X-EBCDIC-Germany-EURO(EBCDIC)
1142X-EBCDIC-DenmarkNorway-EURO(EBCDIC)
1143X-EBCDIC-FinlandSweden-EURO(EBCDIC)
1144X-EBCDIC-Italy-EURO(EBCDIC)
1145X-EBCDIC-Spain-EURO(EBCDIC)
1146X-EBCDIC-UK-EURO(EBCDIC)
1147X-EBCDIC-France-EURO(EBCDIC)
1148X-EBCDIC-International-EURO(EBCDIC)
1149X-EBCDIC-Icelandic-EURO(EBCDIC)
1161TIS620+euro
1162TIS620+euroTIS620+euro
CP1200Unicode (UCS-2LE、後 UTF-16LE) (ANSI)UTF-16LE
1201UTF-16BE
CP1250Windows 3.1 東欧 (ANSI)
CP1251Windows 3.1 キリル文字 (改訂あり) (ANSI)
CP1252Windows 3.1 Latin I (改訂あり) (ANSI)Windows-1252
CP1253Windows 3.1 希臘語 (改訂あり) (ANSI)
CP1254Windows 3.1 トルコ語 (改訂あり) (ANSI)
CP1255ヘブライ語 (改訂あり) (ANSI)
CP1256アラビア語 (改訂あり) (ANSI)
CP1257バルト語 (改訂あり) (ANSI)
CP1258Windows-1258 (改訂あり) (ANSI)
1208UTF-8
CP1361韓国語 (KS X 1001 組合型) (OEM)
1381
1383EUC-CN
1370Windows-950+euro
1386GBK
1394Shift_JISX0213
2022? ISO/IEC2022
4049ISO/IEC8859-7
9066TIS620
10000MacRoman
10001MacJapanese
10002MacChineseTrad
10003MacKorean
10004MacArabic
10005MacHebrew
10006MacGreek
10007MacCyrillic
10008MacChineseSimp
10029MacCentralEurope
10079MacIcelandic
10081MacTurkish
13488UTF-16
17584UTF-16
20000X-Chinese-CNS
20002Big5 倚天
20127ASCII
20269?
20273X-EBCDIC-Germany
20277X-EBCDIC-DenmarkNorway
20278X-EBCDIC-FinlandSweden
20280X-EBCDIC-Italy
20284X-EBCDIC-Spain
20285X-EBCDIC-UK
20290X-EBCDIC-JapaneseKatakana
20420X-EBCDIC-Arabic
20423X-EBCDIC-Greek
20424X-EBCDIC-Hebrew (IBM424)
20833X-EBCDIC-KoreanExtended
20838X-EBCDIC-Thai
20866KOI8-R
20871X-EBCDIC-Icelandic
20880X-EBCDIC-CyrillicRussian
20905X-EBCDIC-Turkish
20949EUC-KR
21025X-EBCDIC-CyrillicSerbianBulgarian
21866KOI8-U
25546?
28591ISO/IEC8859-1
28592ISO/IEC8859-2
28593ISO/IEC8859-3
28594ISO/IEC8859-4
28595ISO/IEC8859-5
28596ISO/IEC8859-6
28597ISO/IEC8859-7
28598ISO/IEC8859-8
28599ISO/IEC8859-9
28605ISO/IEC8859-15
29001X-Europa
29105X-IA5
29106X-IA5-German
29107X-IA5-Swedish
29108X-IA5-Norwegian
33722EUC-JP
38598ISO-8859-8-I
50000X-User-Defined
50001_AutoDetect_all
50220ISO-2022-JP
50221_ISO-2022-JP$ESC
50222_ISO-2022-JP$SIO
50225ISO-2022-KR
50930X-EBCDIC-JapaneseAndKana
50931X-EBCDIC-JapaneseAndUSCanada
50932JISAUTO
50933X-EBCDIC-KoreanAndKoreanExtended
50935X-EBCDIC-SimplifiedChinese
50937X-EBCDIC-TraditionalChinese
50939X-EBCDIC-JapaneseAndJapaneseLatin
50949_AutoDetect_kr
CP51932EUC-JP のようなもの (改訂あり)
51936EUC-CN
51949EUC-KR
52936HZ-GB-2312
54936GB18030
57002X-ISCII-de
57003X-ISCII-be
57004X-ISCII-ta
57005X-ISCII-te
57006X-ISCII-as
57007X-ISCII-or
57008X-ISCII-ka
57009X-ISCII-ma
57010X-ISCII-gu
57011X-ISCII-pa
65000UTF-7
65001UTF-8

注: 表にある名前は、内容のほぼ同じである符号の IANA などでの名称を主に示している。必ずしも同一ではない。

949 (韓語)

KSX1001 完成型を元にした符号。 EUC-KR に相当する。

MS949 はシフトJIS的に拡張して UHC。 更に後に KS X 1001:1998 に追随して EURO SIGN と REGISTERD SIGN を追加している。

MS20949 と MS51949 の違いは不明。 IUC の表に拠ると同一。

1200, 1201 (Unicode)

元々は両者とも UCS-2 相当だったが、 Unicode にサロゲート・ペアが導入されたのに伴い UTF-16 相当に。

1251-1258

Windows では EURO SIGN が追加されましたが、番号は変わっていません。

Windows コードページ

[26]

番号名前元になった規格
874ThaiTIS620
932Japanese Shift-JISJISX0208
936Simplified Chinese GBKGB2312
949KoreanKSX1001
950Traditional Chinese Big5Big5
1250Central Europe
1251Cyrillic
1252Latin IISO/IEC8859-1
1253Greek
1254Turkish
1255Hebrew
1256Arabic
1257Baltic
1258Viet Nam

[27] コードページは一杯ありますが、 Windoze が実質的に support してるのはこれだけみたいです。

[28] M$ が相手にしている CodePage は IsValidCodePage の説明にあるみなさまらしい。上の表の倍くらいある。

[31] これに加えて、 WinIE などで使うのに、幾つかの IETF charset に CodePage 番号が振られている。

[22] なお、 Code Page 一般については Wiki page CodePage で扱い、 Windows の実装についてはこちらで扱います。 特定の CP について量が多い場合はそれを独立させましょう。

情報源

[32] 一般によく知られていて使われているのは Unicode Consortium のサイトにある変換表 [UMAP] ですが、他の情報源 として M$ のサイトにある [GDEV] と [TYPO] もそれぞれ Unicode との対応を含んだ表があります。

[5] いずれも M$ 社の情報ではありますが、少し違いがあります。 [TYPO] は WindozeAPI が実際に持っている変換表とおそらく 同じ情報を使っているようで、 Private Use Area との対応も 出てきます。 ([UMAP] とかに出てこないのは、 PUA との対応は 変換表に入れないという方針があるらしいです。)

[34] M$ の変換処理と同じであることを謳うであれば、 [TYPO] の情報も参考にして Windoze API を使った場合と同じ結果になる ようにするべきでしょう。事情があってそう出来ない場合であっても 少なくてもそう注記するのが望ましいと思われます。

[13] >>346 の [TYPO] の表は M$ site から削除されてしまいました。 重要だったのは 932, 936, 949, 950 ですが、いずれも web.archive.org から入手出来ます。

[14] >>13 削除されてしまった理由は分からないが、 Windows API の変換とおそらく同じ (ほんとうに全く同じかは、 各プラットフォーム毎に確認しないとわからないが。) 表としての価値は変わらないだろうから、変換表を作るときは 各実装者はこれらの情報を参考にしてほしい。

[24] >>14 Windows Me で MultiByteToWideChar, WideCharToMultiByte を使って調べた結果、 CP 932,936,949,950 とも [TYPO] と一致しますた。

[21] もちろん、一番あてになるのは実際の実装です。 ただ M$ の場合実装も資料も当てにならないのですが...

[51] [TYPO]と同じ形式の表が、Best Fit mappingという名前で2006年からUnicode.orgで公開されていたようです。

また2009年からMSのダウンロードセンターでも公開されているようです。

[MS-UCODEREF]経由で発見しました。

932 (Shift JIS)

[30] Win95 (WindowsのNLSファイル (>>25)) と Win98 (WindowsのNLSファイル (>>26)) では、 「+0x8394 U+3094 <- # HIRAGANA LETTER VU」 のみ異なります。 (WindowsのNLSファイル (>>26) で追加)

936 (GBK)

[16] 936 の 0x80 は [TYPO] の表では U+0080 になってるけど、 Windows 2000 では EURO SIGN になる。 (いつかわったか不明)

949 (UHC)

 -0x52	U+00AE	<-	# REGISTERED SIGN
 +0xA2E6	U+20AC		# EURO SIGN
 +0xA2E7	U+00AE		# REGISTERED SIGN

[17] [TYPO] の表と Windows 2000 ではこの3点が違う。 (いつ変わったか不明) (KSX1001:1998 に追随するもの。)

[41] >>17 Windows 9x ではのようです。 (>>19,>>20)

950 (Big5)

 +0xA3E1	U+20AC		# EURO SIGN

[18] [TYPO] の表と Windows 2000 はこれだけ違う。 (いつ変わったか不明)

[42] >>18 Windows 9x ではのようです。 (>>19,>>20)

1252 (WinLatin)

[29] EURO 追加の前後の変化 (Win95 (WindowsのNLSファイル (>>25)) と Win98 (WindowsのNLSファイル (>>26)) での調査結果)

 -0x01	U+263A	<-	# WHITE SMILING FACE
 -0x02	U+263B	<-	# BLACK SMILING FACE
 -0x03	U+2665	<-	# BLACK HEART SUIT
 -0x04	U+2666	<-	# BLACK DIAMOND SUIT
 -0x05	U+2663	<-	# BLACK CLUB SUIT
 -0x06	U+2660	<-	# BLACK SPADE SUIT
 -0x08	U+25D8	<-	# INVERSE BULLET
 -0x09	U+25CB	<-	# WHITE CIRCLE
 -0x0A	U+25D9	<-	# INVERSE WHITE CIRCLE
 -0x0B	U+2642	<-	# MALE SIGN
 -0x0C	U+2640	<-	# FEMALE SIGN
 -0x0D	U+266A	<-	# EIGHTH NOTE
 -0x0E	U+266B	<-	# BEAMED EIGHTH NOTES
 -0x10	U+25BA	<-	# BLACK RIGHT-POINTING POINTER
 -0x11	U+25C4	<-	# BLACK LEFT-POINTING POINTER
 -0x12	U+2195	<-	# UP DOWN ARROW
 -0x13	U+203C	<-	# DOUBLE EXCLAMATION MARK
 -0x16	U+25AC	<-	# BLACK RECTANGLE
 -0x17	U+21A8	<-	# UP DOWN ARROW WITH BASE
 -0x18	U+2191	<-	# UPWARDS ARROW
 -0x19	U+2193	<-	# DOWNWARDS ARROW
 -0x1A	U+2192	<-	# RIGHTWARDS ARROW
 -0x1B	U+2190	<-	# LEFTWARDS ARROW
 -0x1C	U+221F	<-	# RIGHT ANGLE
 -0x1D	U+2194	<-	# LEFT RIGHT ARROW
 -0x1E	U+25B2	<-	# BLACK UP-POINTING TRIANGLE
 -0x1F	U+25BC	<-	# BLACK DOWN-POINTING TRIANGLE
 -0x5A	U+017D	<-	# LATIN CAPITAL LETTER Z WITH CARON
 -0x7A	U+017E	<-	# LATIN SMALL LETTER Z WITH CARON
 -0x80	U+0080		# <control>
 +0x80	U+20AC		# EURO SIGN
 -0x8E	U+008E		# <control>
 +0x8E	U+017D		# LATIN CAPITAL LETTER Z WITH CARON
 -0x9E	U+009E		# <control>
 +0x9E	U+017E		# LATIN SMALL LETTER Z WITH CARON
 +0xA2	U+20A1	<-	# COLON SIGN

[35] Webにおける文字コードUS-ASCIIISO-8859-1Windows-1252 です。

[37] フォント依存符号化, OTF Windows NT compatibility mapping も参照。

1256 (Arabic)

[36] WindowsのNLSファイル (>>35) で発見された WinIE6 の変換表の追加。 (実際にいつの変換表から追加されたかは不明)

+0x30	U+0660	<-	# ARABIC-INDIC DIGIT ZERO
+0x31	U+0661	<-	# ARABIC-INDIC DIGIT ONE
+0x32	U+0662	<-	# ARABIC-INDIC DIGIT TWO
+0x33	U+0663	<-	# ARABIC-INDIC DIGIT THREE
+0x34	U+0664	<-	# ARABIC-INDIC DIGIT FOUR
+0x35	U+0665	<-	# ARABIC-INDIC DIGIT FIVE
+0x36	U+0666	<-	# ARABIC-INDIC DIGIT SIX
+0x37	U+0667	<-	# ARABIC-INDIC DIGIT SEVEN
+0x38	U+0668	<-	# ARABIC-INDIC DIGIT EIGHT
+0x39	U+0669	<-	# ARABIC-INDIC DIGIT NINE
+0xED	U+06CC	<-	# ARABIC LETTER FARSI YEH

20261

[47]

 -0xC13F	U+003F	->	# QUESTION MARK
 ...
 -0xCF3F	U+003F	->	# QUESTION MARK

[48] Win2k = WindowsのNLSファイル (>>1) と WinXP = WindowsのNLSファイル (>>48) の間で、 >>47 の 0xC13F 〜 0xCF3F の15変換が消されている。 意図的なのかどうかよくわからないが。 (WindowsのNLSファイル (>>46) 参照。)

20932

See CP20932

多対1変換

[57] WindowsUnicode符号位置のうちで、コードページ文字と直接対応関係にある文字以外でも、 似たUnicode文字コードページ文字にと縮退します。

[58] Windows 以外のWindowsコードページの実装は、 Windows の実装を忠実に模倣するものもあれば、 直接対応関係にあるもののみしか対応していないものもあるので、 注意が必要です。

[59] また、 Windowsによって変更が入っていることもあるので注意が必要です。

実装

[23] Windows が実際に Code Page を実装しているのは *.nls というファイル群です。

[25] NLS の実態についての話は長くなったので分離しますた。 See WindowsのNLSファイル

エスケープシーケンス

ANSIエスケープシーケンス

DOCS

注釈

[33] 2002-09-08 (Sun) 18:30:09 名無しさん : 同じ CodePage でも、ユーロの時に変更があったから、互換じゃないこともある。

[8] 2002-09-08 (Sun) 18:30:58 名無しさん : 上の表の対応する規格は、あくまで元になっているだけであって、一般にはその規格には適合しません

[12] 2002-09-25 (Wed) 19:41:22 名無しさん : そういうことだからなんかあったらここに書いて欲しい。

[19] 2002-10-22 (火) 15:14 >>16-18: M$ の 1998 の表ではいずれも旧で、 Windows 2000 ではいずれも新。よって Windows 98 はおそらく旧。 Windows Me は不明。

[20] >>19 Windows Me ではいずれも旧でした。 (日本語版 WinMe ですが、他の言語版でも同じでしょう。) WindowsのNLSファイル (>>21) に NLS file 一覧を書きますた。

[43] 2002-11-11 (月) 20:05 CP20932:

[44] WindowsのNLSファイル (>>1) (Windows 2000) で調べたっけかの CP20000 は、(他の資料に拠ると) 倚天版 Big5 になってるけど、倚天どころかどの Big5 とも合わない。そもそも第1水準・第2水準も配置が滅茶苦茶。 (HKU 版かとも思ったけど、それにしても全く異なる。) 文字集合的には Big5 らしいが・・・

ANSI コードページ

ANSIコードページ

OEM コードページ

OEMコードページ

応用

[38] OpenTypeにおける文字コード

[39] IANA charset, 符号化ラベル

[55] ecma35libDECSPPCS : 65535 超に独自符号を割当。


[40] Aprotool TM tips collection, , http://hp.vector.co.jp/authors/VA002891/APROTIPS.HTM#tip2

[49] Aprotool TM EditorESC: 形式に対応していました。 >>40

[50] 付属ドキュメント (それ自体 ESC: 形式で書かれています。) によると、 「ESC : コードページ : 文字」 で1文字を表します。ただし前の文字と同じなら、「文字」 だけで表せます。しかし行頭では省略できません。

[52] 文字のレンダリングにおける言語に適したフォントの選択や、 ISO 2022TRONコードUnicode言語タグとの相互変換にこのコードページ番号が使われていたようです。

[53] UTF-16BE, UTF-16LE, UTF-8 の計3種類があったようです。

[54] ESC を表現できるのかどうか不明瞭ですが、 省略せずに ESC : コードページ : ESC と書けばいいのでしょうか。

メモ

[4] WIN32 と UNICODE http://www-online.kek.jp/~keibun/win32prog/unicode.html

[6] 240596 – Add euro to 850, 852, 857, 862, 864 - update 862 with new codepoints ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=240596

[10] I'm not a Klingon : A History of Code Pages or What Made Code Page XXXX (or many other computer things) The Way It Is? (2007-03-15 20:24:04 +09:00 版) http://blogs.msdn.com/shawnste/archive/2007/03/13/The-History-of-Code-Pages.aspx

[11] Download: WeightTables - Microsoft Download Center - Download Details ( ( 版)) http://www.microsoft.com/en-us/download/details.aspx?id=10921

[15] Hacking Code Pages, or "How to Totally Hose Your Machine AND Your Data". - I'm not a Klingon (<span style="font-family:pIqaD,code2000;"> </span>) - Site Home - MSDN Blogs ( ( 版)) http://blogs.msdn.com/b/shawnste/archive/2007/03/17/hacking-code-pages-or-how-to-totally-hose-your-machine-and-your-data.aspx

[56] dosbox-staging/contrib/resources/mapping/MAIN.TXT at 608ca8fb7869cc5e8c618c0e6204d15c2981cc92 · dosbox-staging/dosbox-staging · GitHub, https://github.com/dosbox-staging/dosbox-staging/blob/608ca8fb7869cc5e8c618c0e6204d15c2981cc92/contrib/resources/mapping/MAIN.TXT