IT

Shift_JISとCP932とWindows-31Jの違いなどを調べてみた

更新日:

Shift_JIS、CP932、MS932、Windows31-Jはいずれも文字符号化方式(文字コード)を表すものであることは知っていましたが、違いついてよくわかっていなかったので調べてみました。この記事ではこれらの用語を整理してみたいと思います。

Shift_JISとCP932の違い

Shift_JISはJIS X 0208で規格化されている文字集合を符号化する文字符号化方式の一種です。一方、CP932はJIS X 0208に①などのいわゆる機種依存文字(死語?死語という言葉自体が死語かもw)を追加したWindows独自の文字集合を符号化するための文字符号化方式です。符号化する方法はShift_JISと同じです。

つまり、Shift_JISとCP932は、符号化する文字集合自体に違いがあるということです。CP932で使われる文字集合は、Shift_JISで使われる文字集合(JIS X 0208規格)にいくつかの文字を追加したものなので、Shift_JISの文字集合のスーパーセットと考えることができます。したがって、符号化する方式は同じなので、CP932はShift_JISで符号化されたテキストも正しく扱えるでしょう。反対に、CP932で符号化したテキストでも、JIS X 0208の範囲の文字しか使っていなければ、Shift_JISでも扱えるということになります。

Shift_JISとCP932の違いで私がよく混乱したのは、エディターの文字コードを選択して保存する機能についてでした。Windowsのほとんどのテキストエディターでは、保存する文字符号化方式としてShift_JISは選択できますが、CP932を選択する項目自体ありません。しかし、Shift_JISでは符号化できないはずの①などの文字もShift_JISを選択して普通に保存できてしまいます。これは、Shift_JISとCP932の違いを正しく理解していれば、実際にはCP932を使って符号化してファイルに保存しているだろうということは容易に想像できます。

CP932とWindows-31JとMS932は同じもの

結論から言うとCP932、Windows-31J、MS932は内容的には同じものです。CP932をIANAにWindows-31Jという名前で登録したので2つの名前ができてしまいました。CP932という名称の方がどちらかというと一般的に使われている気がしますが、Windows-31Jという名称はIANAの登録名なのでHTMLなどで文字コードを指定するときにはIANAに登録されているWindows-31Jを使う必要があります。なお、JAVAの世界ではMS932という名前が使われています。

結論

CP932とWindows-31JとMS932は同じものを表していますが、コンテキストによって違う名前が使われている(使う必要がある)。Shift_JISは、CP932などとは使用する文字集合が少しだけ異なる、ということを理解できれば、いまの私にとっては必要十分でしたので、これを結論としたいと思います。

いろいろと書きましたが、いまどきは文字符号化方式としてUTF-8が使うのが主流なので普段は何も考えずにUTF-8を使えばよいと思います。特別な理由がなければそれが一番問題が起きない選択でしょう。

-IT

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.