本当は怖くないCP932

  • 147
    Like
  • 3
    Comment
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 とどう違うの?

  • 符号化方法は一緒
  • ただし、符号化文字集合が異なる

符号化文字集合の違い

互換性の為に色んな物を詰め込んでいる

  • JIS X 0201
  • NEC拡張文字
  • IBM拡張文字
  • NEC選定IBM拡張文字

JIS X 0201

  • ASCII の上位互換で、半角カナを追加したもの
  • Shift_JIS では非採用

tumblr_n60md3GUnu1qz56lho1_500.png

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

参考