Shift_JIS≒CP932=MS932=Windows-31J

工作中用的日文系统,经常会遇到乱码的问题,但是对日文编码了解很少,只知道自己的系统中使用的是cp932eclipse中默认编码是ms932matlab中有时要用到Shift_JIS,在网上查资料还看到了Windows-31J。这些都是什么啊?他们之间有什么关系啊?抓狂

终于,找到了这篇文章:Shift_JIS,CP932,MS932,Windows-31J其间的区别

文章来源:http://www.myexception.cn/windows/734131.html


原文如下:

Windows 标准字符集不是Shift_JIS,而是Windows-31J

Shift_JIS是日文的一种字符集,Microsoft的MS-DOS采用Shift_JIS
作为日语标准编码,并命名为CP932(同理GBK相应为CP936,可以在Windows的cmd.exe中输入chcp查看)

开始,Microsoft允许各OEM厂商在CP932的基础上进行扩展,所以造成了各个OEM厂商的字符集都不一样。

后来,截止到Windows3.1日语版,Microsoft限制了各OEM厂商对字符集的扩展。而当时,
日本计算机市场基本被IBM和NEC占领,他们都是在CP932的基础上进行的扩展,所以日语的标准
字符集就变成了CP932了,IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)
把它命名为Windows-31J.

在Java中,为了区分IBM的CP932和Windows-31J,所以用MS932来表示了。

见下图

上图中可以看出CP932、MS932、Windows-31J都是同一个东西
但他们和Shift_JIS是不同的,不过大部分文字都可以同样使用。
在程序中,一般,适用Windows-31J的地方如果使用Shift_JIS可能会有乱码,
但反过来,适用Shift_JIS的地方用Windows-31J就没问题


下面是日文原文:

文章来源:http://una.soragoto.net/topics/13.html

Windows標準の文字コードはShift_JISではなく、Windows-31Jです。
 それらの違いやCP932、MS932といった用語もあわせて整理してみましょう。

 まずはShift_JIS。
 これは日本語の文字集合を符号化する文字符号化方式のうちの一つです。
 Microsoftにより、MS-DOSの標準日本語コードとして採用され、CP932という管理番号を与えられるとともに独自の拡張が行われました。

 MicrosoftはこのCP932を独自に拡張することを、OEMメーカー(MS-DOSを搭載したパソコンを販売するメーカー)に許していたため、各OEMメーカーごとに異なる拡張が行われました。

 その後、MicrosoftはWindows3.1の日本語版を出すにあたり、OEMメーカーにCP932の独自拡張を許すという方針を撤回し、当時、日本のパソコン市場で特に大きなシェアを持っていたIBMとNECによって独自に拡張されたCP932を統合し、これをWindowsにおける日本語標準コードとしました。

 Windowsの日本語標準コードとなったCP932は、IANA(インターネットに関連する番号を管理する組織)にWindows-31Jという名前で登録されました。

 Javaの世界では、IBMのCP932とWindows-31Jを区別するために、MS932という用語が使われます。
Shift_JIS≒CP932=MS932=Windows-31J_第1张图片
上の図からもわかるように、「CP932」、「MS932」、「Windows-31J」は同じものをさしています。そしてそれは「Shift_JIS」とは異なるものですが、実際には「Windows-31J」をさす場合に「Shift_JIS」という言葉が使われることが多々あります。

 たいていの場合はそれで問題ないかもしれませんが、プログラミングにおいて、文字コードに「Windows-31J」と指定すべきところを、「Shift_JIS」と指定したがゆえに、文字化けを引き起こすことがあります。「Windows-31J」で定義されている文字が「Shift_JIS」にはない場合です。

 プログラミングをする場合にはしっかりおさえておきたいところです。

你可能感兴趣的:(编码,日语)