日記
文字コード自動判別がなかなか安定しないEdit

URI情報を取得する際に、そのURIで示されるドキュメントの文字コードを判別して処理を行いたいわけだ。ほとんどはHTMLかXHTMLなんで、

  • HTTPレスポンスヘッダのcontent-type: text/???; charset=****の部分から取得する
  • HTMLヘッダ中の<meta http-equiv="content-type" content="text/html; charset=****">から取得する
  • XMLドキュメント先頭の<?xml version="1.0" encoding="*****" ?>から取得する
  • 上記すべてが取得できず、なおかつcontent-typeがtext系だった場合は、mb_detect_encodingで文字コード自動判別を試みる

といった感じの処理をしているんだけど、

  • content-typeに本来の文字コードとは異なる適当な(たぶんhttpdデフォルト設定のまま)charsetをつけてくる場合は結構ある
  • 実際の文字コードと、HTMLヘッダやXMLヘッダの文字コード宣言とが違っている場合が結構ある(文字コードの設定を変えたけど、テンプレートは直してない、とかかなー)
  • 文字コードとして無効な内容(各種typo、SHIFT_JISじゃなくてSHIFT-JISになっている、無指定のつもりでnoneという文字列が指定されている、など)がセットされている

なんて場合があって、なかなか文字化けを根絶することができない。最初のうちはできるだけまっとうなロジックの範囲で、そういう場合にもそれなりの結果が得られるような対応をしていたんだけど、限界を感じてきたんで、微妙にアドホックな手段が混ざりはじめてきた。

というわけで、そのあたりを自分で設定可能なみなさま、設定が正しいかどうかを見直していただけるといろいろと助かります。

そういや、おそらく複数のhttpdで分散処理をしていて、リクエストを投げるたびに違ったヘッダが返される(外れを引くと文字化けする)という例もあったなー。

Published At2006-07-31 00:00Updated At2006-07-31 00:00