CodePage

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

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

本項は歴史的事項を説明しています。本項の内容の一部または全部は、現在の状況とは異なるかもしれません。

(なお本項の内容の一部または全部は、互換性または歴史的連続性のために現在も有効な場合もあります。しかし新たに利用することは避けるべきです。)

目次

  1. 一覧
  2. 949 (韓語)
  3. 1200, 1201 (Unicode)
  4. 1251-1258
  5. Windows コードページ
    1. 情報源
    2. 932 (Shift JIS)
    3. 936 (GBK)
    4. 949 (UHC)
    5. 950 (Big5)
    6. 1252 (WinLatin)
    7. 1256 (Arabic)
    8. 20261
    9. 20932
    10. 多対1変換
    11. 実装
    12. エスケープシーケンス
    13. 注釈
  6. ANSI コードページ
  7. OEM コードページ
  8. 応用
  9. メモ

一覧#

[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