Edited at

本当は怖くないCP932

More than 1 year has passed since last update.


先に結論


  • 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区に定義

tumblr_n60mfuq8UG1qz56lho1_500.png


IBM拡張文字


  • IBMコードページ932 で追加した、IBM独自の文字集合

  • JIS X 0208 の後ろに115区〜119区を勝手に追加して定義(!)

tumblr_n60mhor9KV1qz56lho1_500.png


NEC選定IBM拡張文字


  • IBM拡張文字は、JIS X 0208 の範囲外に定義されていたので、それを嫌がった NECが 89区〜92区に再定義

tumblr_n60mhd8y2x1qz56lho1_500.png


カオス

拡張文字内でかぶる文字があったりなかったり


けど、見分け方はシンプル

拡張文字をつかってれば、CP932、使ってなければ Shift_JIS


参考