「文字化けするんですけど」

社内にあるテスト用サーバのコンテンツをGoogle Chromeで見ようとすると、文字化けするという。
他のブラウザでは大丈夫なのに…


そして、本番環境ではChromeでも化けないらしい。


「なんか判りますか?」
と言われたら、調べるより他はないでしょう。


まずはテスト環境のページにChromeでアクセスする。
エンコードを確認すると「EUC-JP」になっていた。
そのページはmetaでShift_JISを指定しているにも関わらず、だ。


じゃ、ファイルはどうだろう?と開いて確認すると、当然EUCだったりするワケで。


多分原因はApacheかな、と。
ってことでhttpd.confを開いてみると…

AddDefaultCharset EUC_JP


なるほどね。


本番環境はどうかというと…

AddDefaultCharset JIS

Shiftはいらないの?
まぁ、いいか。


要するに、metaでの指定よりも、httpd.confのaddDefaultCharsetのが優先されるブラウザがあるってことね。
注意しないと。


…ところで、「EUC_JP」って指定の仕方が正しいのかどうか、不安になってきたぞ。
確かにChromeEUCで理解してるようだけど。

AddDefaultCharset ディレクティブ core - Apache HTTP サーバのページには、こう書かれている。

指定する値は、MIME メディアタイプとして使われる IANA に登録されている文字セット名のうちの一つにすべきです。

AddDefaultCharset ディレクティブ core - Apache HTTP サーバ

ってことで、リンクされているIANAのページに行くと…

Name: Extended_UNIX_Code_Packed_Format_for_Japanese
MIBenum: 18
Source: Standardized by OSF, UNIX International, and UNIX Systems
Laboratories Pacific. Uses ISO 2022 rules to select
code set 0: US-ASCII (a single 7-bit byte set)
code set 1: JIS X0208-1990 (a double 8-bit byte set)
restricted to A0-FF in both bytes
code set 2: Half Width Katakana (a single 7-bit byte set)
requiring SS2 as the character prefix
code set 3: JIS X0212-1990 (a double 7-bit byte set)
restricted to A0-FF in both bytes
requiring SS3 as the character prefix
Alias: csEUCPkdFmtJapanese
Alias: EUC-JP (preferred MIME name)

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

これのことだよね?
どっからどー見ても「-」だな。

この名称の管理は ICANN という組織が IANA と称して行っていますが、そこでは EUC-JP として登録されています。

IANA Charset
http://www.iana.org/assignments/character-sets​

と言うことで一応正解としては "-" ですが、まあ実情としては "_" も結構見かけますね。

シフトJIS の方がなぜか Shift_JIS になっているのも混乱の原因かと思います。

EUC_JP と EUC-JP - 教えて!goo

ややこしいなぁ。


しかも「JIS」ってNameもAliasも見当たらないんだけど?


こういう大雑把さってのはどうにかならんもんか。
そんなことよりも誰だよ、設定したのは?


(追記)
ってことで、先日この「JIS」のせいで問題が発生。
一部の新しいブラウザでは、コンテンツがShift_JISを定義していても、AddDefaultCharsetのJISに引っ張られてしまっていたようだ。
この辺りの細かい?差異はたいていのブラウザじゃ吸収してくれてたみたいだけど…

その文字化けは僕は目撃してないので、細かいことは言えないけどさ。
まぁ、そういう文字化けが発生した場合は、化けてる状態でエンコードが何なのかとかってちゃんと報告してくれないとねぇ。
ただ「文字化けした、なんとかしろ」といわれてもさ。