先に結論
- CP932 は、Shift_JIS の独自実装
- 符号化文字集合がいろいろ拡張されている
- 拡張文字の有無で、Shift_JIS と判別可能
CP932ってなあに?
実はいろいろある
- Microsoftコードページ932
- IBMコードページ932
- PC-9800仕様OEMコードページ932
- Windows-31J(MS932)
Microsoftコードページ932
- Microsoftが、MS-DOS 用に作った Shift_JIS の実装
IBMコードページ932PC-9800仕様OEMコードページ932
- IBM、NECが作った、Microsoftコードページ932 の拡張
Windows-31J(MS932)
Microsoftが互換性確保の為に、IBM、NECの拡張を吸収した、Windows 用の CP932
- CP932 といったらほぼほぼこれを指す
- MS932 は、Java での呼称
まとめ
CP932 ≒ Windows-31J = MS932
Shift_JIS ってそもそもなにを指すの?
符号化文字集合 JIS X 0208 を使った文字符号化方式
符号化文字集合
文字列の集合と1対1で紐付けられたコードの集まり
符号化文字集合 JIS X 0208
- 日本工業規格(JIS)で定められた、日本語の符号化文字集合
- 7ビット or 8ビットで表現できる、94(区) x 94(点) の文字の集まり
分類はこんな感じ
- 1〜2区 : 記号
- 3区 : 数字・ローマ字
- 4区 : ひらがな
- 5区 : カタカナ
- 6〜7区 : ギリシャ・キリル文字
- 8区 : 罫線
- 9〜15区 : 未定義
- 16〜47区 : 第一水準漢字
- 48〜84区 : 第二水準漢字
- 85〜94区 : 未定義
文字符号化方式
- 符号化文字集合をコードに変換する仕組み
- Shift_JIS ならば以下のリンクに書かれているルールで、JIS X 0208 をコードに変換している
→ 文字コード(UTF-8,Shift_JIS,EUC-JP,ISO-2022-JP)についての俺的まとめ - 今日もスミマセン。
- EUC-JP も、文字符号化方式
- Shift_JIS とは別の方法で、JIS X 0208 を符号化している
CP932 って Shift_JIS とどう違うの?
- 符号化方法は一緒
- ただし、符号化文字集合が異なる
符号化文字集合の違い
互換性の為に色んな物を詰め込んでいる
- NEC拡張文字
- IBM拡張文字
- NEC選定IBM拡張文字
NEC拡張文字
- PC-9800仕様OEMコードページ932 で追加した、NEC独自の文字集合
- JIS X 0208 の未定義の13区に定義
IBM拡張文字
- IBMコードページ932 で追加した、IBM独自の文字集合
- JIS X 0208 の後ろに115区〜119区を勝手に追加して定義(!)
NEC選定IBM拡張文字
- IBM拡張文字は、JIS X 0208 の範囲外に定義されていたので、それを嫌がった NECが 89区〜92区に再定義
カオス
拡張文字内でかぶる文字があったりなかったり
けど、見分け方はシンプル
拡張文字をつかってれば、CP932、使ってなければ Shift_JIS