山﨑髙島問題

山﨑髙島問題とは、コード変換によって、
髙島が→?島
山﨑が→山?
と表示されるなどの問題である。(勝手に定義)
そして、コード変換によって文字が正しく表示されることを確認するテストを
山﨑髙島テストと呼び、リリース前に実施しよう。

それぞれの文字の俗称
・・・はしごだか
・・・たつさき




[文字化けが発生するケース]

■■システムの構成■■
 ブラウザ(charset=euc-jp)
  ↓write  ↑read
 Oracle(NLS_LANG=Japanese_Japan.JA16EUC)
  ↓read  ↑write 
 Windowsアプリ(CP932?)

Windowsアプリが、Oracleに書き込んだデータをブラウザで参照したときに、文字化けが発生しています。
ブラウザ, Oracle間では、の読み書きは正常だったので、OracleWindowsアプリの間で正しくコード変換がされていないという結論に至りました。
前にネットで調べたときは、CP932(wikipedia:Microsoftコードページ932)というキーワードがでてきたので、まぁマイクロソフトのせいでしょうという感じと、UTF-8にすればこのへんの問題はすべて片付くだろうという漠然とした考えを持っていたので、自分の中でこの問題は収束していました。


システム改修はしないにしても、原因を知っておく必要があると思い、EUC-JP, Shift JISにおけるの字のコードを検索してみました。ところが、結果は以下の通りでした。これはいったい、どういうことなんでしょう?

EUC-JP Shift JIS URL
存在するはず
(コードは不明)
EEE0,FBFC http://madroom-laboratory.seesaa.net/article/99642000.html
記載なし EEE0,FBFC http://homepage1.nifty.com/~petronius/kana/kakutyaumozi.html
FCE2 EEE0 http://qpon.quu.cc/pc
存在しない 存在しない http://www.kawa.net/works/jcode/uni-escape.html
存在しない 存在しない http://hal456.net/qdmail/irregular_char
FCE2,8FF4FB EEE0,FBFC http://grep.blog49.fc2.com/blog-entry-87.html



[Shift JISに、は含まれているのか?]
答えはNoです。(あってるか不安..)
wikipedia:Shift_JIS

Shift_JIS(シフトジス)は、現在多くのパソコン上のファイル内で日本語を表すために使われている文字コードである。かつてはベンダーによる独自拡張を含む文字コード群に対する曖昧な名称であったが、現在は標準化文書JIS X 0208の附属書1で規定されている。「Shift_JIS」はIANAにおける登録名である。

http://www.jisc.go.jp/app/JPS/JPSO0020.html
JIS規格番号からJISを検索 → "X0208" で検索し、閲覧可能
(Windows7, Acrobat Reader Xで見ることができました。Macではどうやったら見れるのだろう..)


http://www.iana.org/assignments/character-sets

Name: Shift_JIS (preferred MIME name)
MIBenum: 17
Source: This charset is an extension of csHalfWidthKatakana by
adding graphic characters in JIS X 0208. The CCS's are
JIS X0201:1997 and JIS X0208:1997. The
complete definition is shown in Appendix 1 of JIS
X0208:1997.
This charset can be used for the top-level media type "text".
Alias: MS_Kanji
Alias: csShiftJIS



http://www.asahi-net.or.jp/~ax2s-kmtn/character/japan.html#sjis
↑このページにもShift JISの記述があり、"正確にはShift JISには、Windows機種依存文字(NEC機種依存文字,NECIBM拡張文字,IBM拡張文字)は含まれない"とあります。

髙は、JIS X 0208(第一水準、第二水準)に含まれないので、結果として、Shift JISには含まれないことになります。
参考: JIS基本漢字(JIS X 0208)コード表
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html


[CP932に、は含まれているのか?]
答えはYesです。

文字 コード
FBFC
FAB1

Windows Codepage: 932 (Japanese Shift-JIS)
Lead Byte = 0xFA http://msdn.microsoft.com/ja-jp/goglobal/gg671839
Lead Byte = 0xFB http://msdn.microsoft.com/ja-jp/goglobal/gg671840


wikipedia:cp932

Microsoft コードページ 932(以下 CP932)は、マイクロソフト及び、MS-DOSOEM ベンダが Shift JIS を独自に拡張した文字コードである。また同時に、CP932 は Shift_JISWindows アプリケーションにおける「実装」を指す用語であるとも言える。

→各ベンダーが実装するShift_JISShift_JISの亜種と呼ぶとのこと


MySQLリファレンスマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/charset-cp932.html
Windows の中の JIS 外漢字
http://www1.ocn.ne.jp/~tabby/language/spill.html
Windows-31J の文字セット
http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/Windows-31J-charset.html
包摂
http://www.hucc.hokudai.ac.jp/~o16404/faq.htm#b
シフト JIS 漢字コード
http://www.infonet.co.jp/ueyama/ip/binary/shiftjis.html






[Shift JISの亜種]
Shift JIS を独自に拡張した文字コード
Microsoftコードページ932
・MacJapanese
などがある。
参考資料:
WindowsMac OS X 間での シフト JIS コード非互換文字一覧
http://www.notoinsatu.co.jp/font/omake/S-JIS_check.pdf

[EUC-JPののコードは?]
wikipedia:EUC-JP

EUCエンコード方式上にASCIIとJIS X 0208文字集合を配置したもので、半角カナ (JIS X 0201) とJIS補助漢字 (JIS X 0212) も含むことができる。

→ということは、EUC-JPにはは含まれない?
ブラウザ、Oracle間でが表示できたのはなぜか?


[EUC-JPにも亜種が存在する]
EUC-JPにも以下の亜種が存在するようです。
wikipedia:EUC-JP
・CP51932

CP51932はMicrosoftWindowsで使用しているWindows-31JEUC-JP互換表現。

eucJP-ms

eucJP-msは、オープン・グループ及び日本ベンダ協議会が策定した文字符号化方式。実装例はMySQL v5.0以降等。

相当まぎらわしい命名ですね!!
そして、CP51932には、CP932にはあったIBM拡張文字(髙、﨑が含まれる)が含まれていません。これこそが文字化け発生の原因でしょうか。(調査終了)
↑違う!


↓原因はこれかな?
[Oracleにおける文字コードの扱い]
http://www.atmarkit.co.jp/fdb/rensai/ora_admin/05/oraadmin0501.html





eucJP-ms と CP51932 の違い
http://msyk.at.webry.info/200511/article_2.html



[IBM拡張文字とは]
IBM拡張文字
 http://www.wdic.org/w/WDIC/IBM%e6%8b%a1%e5%bc%b5%e6%96%87%e5%ad%97
 https://ja.wikipedia.org/wiki/IBM%E6%8B%A1%E5%BC%B5%E6%96%87%E5%AD%97

「髙」は「高」の、「﨑」は「崎」の俗字であり、康熙字典に根拠はない。

との記述がある。
 wikipedia:康熙字典


草なぎ剛のなぎ字がIBM拡張文字にある理由って?
 http://oshiete.goo.ne.jp/qa/4925090.html



[髙]
髙は、
JIS X 0208(第一水準、第二水準)に含まれていない
JIS X 0212(補助漢字)には含まれていない
JIS X 0213(JIS X 0208 + 第三水準、第四水準)に含まれていない
NEC 選定 IBM 拡張文字に含まれる
IBM 拡張文字に含まれる


人名用漢字の新字旧字:「」と「
http://dictionary.sanseido-publ.co.jp/wp/2011/04/21/taka/