山﨑髙島問題とは、コード変換によって、
髙島が→?島
山﨑が→山?
と表示されるなどの問題である。(勝手に定義)
そして、コード変換によって文字が正しく表示されることを確認するテストを
山﨑髙島テストと呼び、リリース前に実施しよう。
それぞれの文字の俗称
髙・・・はしごだか
﨑・・・たつさき
[文字化けが発生するケース]
■■システムの構成■■
ブラウザ(charset=euc-jp)
↓write ↑read
Oracle(NLS_LANG=Japanese_Japan.JA16EUC)
↓read ↑write
Windowsアプリ(CP932?)
Windowsアプリが、Oracleに書き込んだデータをブラウザで参照したときに、文字化けが発生しています。
ブラウザ, Oracle間では、髙の読み書きは正常だったので、OracleとWindowsアプリの間で正しくコード変換がされていないという結論に至りました。
前にネットで調べたときは、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機種依存文字,NECのIBM拡張文字,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
Microsoft コードページ 932(以下 CP932)は、マイクロソフト及び、MS-DOS の OEM ベンダが Shift JIS を独自に拡張した文字コードである。また同時に、CP932 は Shift_JIS の Windows アプリケーションにおける「実装」を指す用語であるとも言える。
→各ベンダーが実装するShift_JISをShift_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
などがある。
参考資料:
Windows と Mac 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はMicrosoftがWindowsで使用しているWindows-31JのEUC-JP互換表現。
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/