Feature #4280
closedSJIS should be an alias of Windows-31J, not of Shift_JIS
Description
=begin
Rubyのencodingとして「SJIS」を指定する時、指定している人はShift_JISとWindows-31Jの違いを意識してる可能性は低いように思います。
だとすると、1.8までの$KCODE="sjis"がWindows-31Jに対応させられていることから考えて、SJISはShift_JISではなくWindows-31Jのaliasであるべきではないでしょうか?
=end
Updated by kosaki (Motohiro KOSAKI) almost 14 years ago
=begin
FYI:
Javaでは SJIS==Shift_JIS ですね。以下でJavaの歴史的経緯が説明されているようです。
http://www.ingrid.org/java/i18n/encoding/shift_jis.html
=end
Updated by usa (Usaku NAKAMURA) almost 14 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:43030] [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS"
on Jan.14,2011 16:05:56, redmine@ruby-lang.org wrote:
Javaでは SJIS==Shift_JIS ですね。以下でJavaの歴史的経緯が説明されているようです。
我々は彼らの失敗を踏まえているので、Shift_JISとWindows-31Jが
ごっちゃになったりはしていません(えっへん)。
よって、IANA charsetにあるような名前をそれと異なる意味にした
いという発想はありません。
で、「SJIS」という名前に対しては特に公的な定義が存在しない状
況のはずです(何かあったら教えてください)。
なので、その意味は慣用で決まっているのだと思いますが、Ruby界
隈においては「$KCODEに指定するもの」というのが最も一般的な現
れ方なのではないかと思うわけです。
であれば、それに合わせるべきではないでしょうか。
さて、JavaではなぜSJIS==Shift_JISなんでしょうか。
Javaの「Shift_JISにまつわる」歴史的経緯は小崎さんに示していた
だいた文書にあるとおりだと思いますが、「SJISについては」特に
なんの説明も無くShift_JISと同じとして扱われてますよね?
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by naruse (Yui NARUSE) almost 14 years ago
=begin
まだ考え中ですが、今のところ特に反対要素はありません。
まず、現状 SJIS = Shift_JIS なのは、Java にあわせたものです。
しかし、Java の経緯は、
1.1: SJIS == Shift_JIS
1.2: SJIS, Shift_JIS == MS932
1.4.1: SJIS == Shift_JIS, MS932
なのであんまり参考になりません。
IANA Charsets にも SJIS の規定はないので、これも問題ありませんな。
=end
Updated by kosaki (Motohiro KOSAKI) almost 14 years ago
=begin
2011年1月14日16:35 U.Nakamura usa@garbagecollect.jp:
こんにちは、なかむら(う)です。
In message "[ruby-dev:43030] [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS"
on Jan.14,2011 16:05:56, redmine@ruby-lang.org wrote:Javaでは SJIS==Shift_JIS ですね。以下でJavaの歴史的経緯が説明されているようです。
我々は彼らの失敗を踏まえているので、Shift_JISとWindows-31Jが
ごっちゃになったりはしていません(えっへん)。
よって、IANA charsetにあるような名前をそれと異なる意味にした
いという発想はありません。で、「SJIS」という名前に対しては特に公的な定義が存在しない状
況のはずです(何かあったら教えてください)。
なので、その意味は慣用で決まっているのだと思いますが、Ruby界
隈においては「$KCODEに指定するもの」というのが最も一般的な現
れ方なのではないかと思うわけです。
であれば、それに合わせるべきではないでしょうか。さて、JavaではなぜSJIS==Shift_JISなんでしょうか。
Javaの「Shift_JISにまつわる」歴史的経緯は小崎さんに示していた
だいた文書にあるとおりだと思いますが、「SJISについては」特に
なんの説明も無くShift_JISと同じとして扱われてますよね?
実は全然思い出せないんですが、SJISはUnix localeでの名前ではなかったですかね。
個人的にはSJISは統一見解がないから使うなとか言いたいんですがそうもいかない
んでしょうね。
歴史的経緯を含む文字コードは何がやっかいかというと、言語の文字コードの規定と
より下位レイヤーのソフト(データベースソフトとか)での文字コードの規定に不一致が
あったときに困るわけで、Rubyの都合だけで決めていいんだろうかというもやもや感と、
イマドキSJISは理解するけどShift_JIS, CP932を理解しないデータベースなんて生き
残っているのだろうかという漠然とした疑問が頭の中で回っていたりします。
どうなんでしょうねぇ。もうちょっと考えます
=end
Updated by usa (Usaku NAKAMURA) almost 14 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:43033] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS"
on Jan.14,2011 17:10:00, kosaki.motohiro@gmail.com wrote:
実は全然思い出せないんですが、SJISはUnix localeでの名前ではなかったですかね。
個人的にはSJISは統一見解がないから使うなとか言いたいんですがそうもいかない
んでしょうね。
歴史的経緯を含む文字コードは何がやっかいかというと、言語の文字コードの規定と
より下位レイヤーのソフト(データベースソフトとか)での文字コードの規定に不一致が
あったときに困るわけで、Rubyの都合だけで決めていいんだろうかというもやもや感と、
イマドキSJISは理解するけどShift_JIS, CP932を理解しないデータベースなんて生き
残っているのだろうかという漠然とした疑問が頭の中で回っていたりします。どうなんでしょうねぇ。もうちょっと考えます
真面目なプログラムはSJISとかいうどう考えてもヤバい名前は使わ
ないと思うんですよね。
データベースアクセスするのにSJISとか書く人は思う存分はまれば
いいと思うので、まあいいんじゃないでしょうか。
なんですが、Unix localeとか出てくるとちょっとまずいかもという
気はします。
なんかデフォルトの日本語localeがSJISなUnixがあったような気が
するんですが、なんだったかしら。AIXあたり?
そしてそいつのlocale名は何でその実体はなんだったのかしら...
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by naruse (Yui NARUSE) almost 14 years ago
=begin
2011年1月14日17:29 U.Nakamura usa@garbagecollect.jp:
こんにちは、なかむら(う)です。
In message "[ruby-dev:43033] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS"
on Jan.14,2011 17:10:00, kosaki.motohiro@gmail.com wrote:実は全然思い出せないんですが、SJISはUnix localeでの名前ではなかったですかね。
個人的にはSJISは統一見解がないから使うなとか言いたいんですがそうもいかない
んでしょうね。
歴史的経緯を含む文字コードは何がやっかいかというと、言語の文字コードの規定と
より下位レイヤーのソフト(データベースソフトとか)での文字コードの規定に不一致が
あったときに困るわけで、Rubyの都合だけで決めていいんだろうかというもやもや感と、
イマドキSJISは理解するけどShift_JIS, CP932を理解しないデータベースなんて生き
残っているのだろうかという漠然とした疑問が頭の中で回っていたりします。どうなんでしょうねぇ。もうちょっと考えます
真面目なプログラムはSJISとかいうどう考えてもヤバい名前は使わ
ないと思うんですよね。
データベースアクセスするのにSJISとか書く人は思う存分はまれば
いいと思うので、まあいいんじゃないでしょうか。なんですが、Unix localeとか出てくるとちょっとまずいかもという
気はします。
なんかデフォルトの日本語localeがSJISなUnixがあったような気が
するんですが、なんだったかしら。AIXあたり?
そしてそいつのlocale名は何でその実体はなんだったのかしら...
http://home.m05.itscom.net/numa/cde/sjis-euc/sjis.html
Unixだと例えばこんな。
しかし、Unicodeとの対応がどんなもんかはまたよくわからんすな。
--
NARUSE, Yui
naruse@airemix.jp
=end
Updated by kosaki (Motohiro KOSAKI) almost 14 years ago
=begin
真面目なプログラムはSJISとかいうどう考えてもヤバい名前は使わ
ないと思うんですよね。
データベースアクセスするのにSJISとか書く人は思う存分はまれば
いいと思うので、まあいいんじゃないでしょうか。なんですが、Unix localeとか出てくるとちょっとまずいかもという
気はします。
なんかデフォルトの日本語localeがSJISなUnixがあったような気が
するんですが、なんだったかしら。AIXあたり?
そしてそいつのlocale名は何でその実体はなんだったのかしら...
ロケール名はわかりませんでしたが、
https://www-304.ibm.com/support/docview.wss?uid=std383ebe99c4d8d16e7492574d600087fe7
http://publibn.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/aixbman/codebook/jp_codebook.pdf
を見ると実体はIBM943みたいです。
=end
Updated by naruse (Yui NARUSE) almost 14 years ago
=begin
(2011/01/14 19:04), SATOH Fumiyasu wrote:
At Fri, 14 Jan 2011 17:29:53 +0900,
U.Nakamura wrote:なんですが、Unix localeとか出てくるとちょっとまずいかもという
気はします。
なんかデフォルトの日本語localeがSJISなUnixがあったような気が
するんですが、なんだったかしら。AIXあたり?
そしてそいつのlocale名は何でその実体はなんだったのかしら...AIX の日本語の既定 locale の名前は Ja_JP で Shift_JIS でも
CP932 でも CP943 でもない Shift_JIS の亜種らしいです。
ほかに Ja_JP.IBM-943、ja_JP.IBM-932 とかがあります。
ja_JP.SJIS はありません(と記憶している)。
AIX では「AIX 5L 日本語コード一覧表(SC88-0427) 」を読むに、
- 「SJIS」はない
- AIX 4.3.2 以前は IBM932、以降は IBM943
- 文字集合はマイクロソフト標準キャラクタセットと同一
- IBM943 は 0x5C == U+005C
- Unicode への変換は Shift_JIS 風 (0x5C 以外)
http://publibn.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/aixbman/codebook/jp_codebook.pdf
しかし、以下のような話もあり、混乱もある模様。
http://www-01.ibm.com/support/docview.wss?uid=std3c2d180a83715c3a149256ec400280bf4
http://www.hi-matic.org/diary/?20090514
Solaris の Windows 同等の locale 名は ja_JP.PCK です。
ja_JP.SJIS はありません。
そういえば PCK は nkf でサポート希望来ましたな。
ruby でも alias 追加するか、replica にするか。
で、こいつは何者かというと、¶
PC 漢字コード
PC 漢字コード (以降、PCK とします) は、一般に「シフト JIS (あるいは MS 漢字) コード」と呼ばれ、
Microsoft が Windows 3.1 で規定したマイクロソフト標準キャラクタセットと同等の文字集合および
エンコーディングを提供するものです。ja_JP.PCK ロケールで日本語を表現する文字コード体系として
使われています。PCK に関する詳細は、PCK(5) マニュアルページを参照してください。」
http://download.oracle.com/docs/cd/E19253-01/819-0364/japan.utility-10006/index.html
とあり、後ろに付いてる変換規則も見ると、
「PC 漢字コードと UTF-8 の変換は、内部で一旦変換元のコードセットから日本語 EUC に変換し、
そこから目的のコードセットへ変換します。」
とある。
じゃあ、PCK と 日本語 EUC の変換はと見ると、
日本語 EUC と PCK の文字コード変換規則は『TOG 日本ベンダ協議会』の日本語 EUC・シフト JIS
コード変換仕様』に基づいています。」
とあるので、これですね。
http://home.m05.itscom.net/numa/cde/sjis-euc/sjis-euc.html
で、この日本語 EUC と Unicode の変換規則は何かというと、どうも eucJP-ascii なようですね。
「JIS X 0221 式の変換 (ASCII と併用する場合)」
http://home.m05.itscom.net/numa/cde/ucs-conv/appendix.html
http://download.oracle.com/docs/cd/E19253-01/819-0606/x-2chn0/index.html
http://download.oracle.com/docs/cd/E19253-01/819-0606/appb-pckwarn-1/index.html
日立の HI-UX (HP-UX の亜種) に ja_JP.SJIS という locale が
ありますが、これが Shift_JIS か亜種 (CP932?) であるかは覚えていない…。
HP-UX にも ja_JP.SJIS はあったかなぁ?
HP-UX は SJIS/SJISMS で分けているように見えますね。
http://docs.hp.com/ja/5991-1165/ch02s06.html
総じて見ると、「ここで,SJISとはMicrosoft が Windows 3.1 で規定した
「マイクロソフト標準 キャラクタセット」のこととする.」って感じみたいですな。
http://home.m05.itscom.net/numa/cde/sjis-euc/sjis-euc.html
ただ、変換表はどうかというと、eucJP-ascii 経由っぽい雰囲気も。
--
NARUSE, Yui naruse@airemix.jp
=end
Updated by usa (Usaku NAKAMURA) almost 14 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:43056] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS"
on Jan.17,2011 20:01:21, kosaki.motohiro@jp.fujitsu.com wrote:
1点気になるのは非互換なんですが、「ぎゃっ」と声がするかどうかで確認する
作戦だという理解でいいのでしょうか?
自分でSJISを指定してる人は、最初から書いてるように、単にうか
つな人なので勝手に叫べ、という感じです。
で、自分でそう書いてないのにSJISとして取り扱われてる人なんて
いるわけないよねーははは、と思っていたわけなんですが、Unixの
localeが*.SJISの場合のみそういうことが起きるということに小崎
さんの指摘で気付いたので確認してたという感じです。
できれば「ぎゃっ」と叫ばせる前に確認したいわけですが、現実問
題としてはWindowsと互換でない前提でSJISというlocaleをわざわざ
使ってる奇特な人なんてほとんどいないと想像できるので、見切り
をつけてやってみてはどうか、という気分に傾いてはいます。
いずれにせよ、Ruby M17Nの権威、成瀬さんがどう判断するか、なの
ですが。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by naruse (Yui NARUSE) over 13 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r31074.
Usaku, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end