😱

GitHub PagesでShift_JISやEUC-JPでWebページを配信すると(おそらく)回避できない文字化けが発生する

2024/02/16に公開

直面した問題

GitHub PagesでShift_JIS などのWebページを配信するとブラウザからの閲覧時に文字化けするので困りました。

<meta charset="Shift_JIS">

を指定したにも関わらずです。

なぜ?

GitHub Pagesの Content-Type レスポンスヘッダで必ず charset=utf-8 が指定されるためです。

Github Pages server always specifies utf-8 in header regardless of meta tag · community · Discussion #22867
html - Github Pages change content char set - utf8 and windows1256 Arabic - Stack Overflow

少なくとも自分の環境(Chrome)では <meta charset= で文字コードを指定しても Content-Type の指定が優先されるようでした。

結論としてはGitHub PagesでUTF-8以外の文字コードを使う場合、一般ユーザからのブラウザ表示時に文字化けしないようにすることは難しいと思います。なんらかの事情で Shift_JISeuc-jp 等の文字コードを使うことが必須な場合、ホスティングプラットフォーム選定において注意した方が良いでしょう。

何をしていて気付いたの?

openGraphScraperでUTF-8以外のWebサイトからOG情報を取得すると文字化けする問題の修正に取り組んでいました。

Add character encoding detection and decoding logic by cm-dyoshikawa · Pull Request #206 · jshemas/openGraphScraper

テストデータがGitHub Pagesに上がっており、UTF-8以外でエンコードしたHTMLをブラウザで表示確認した際に文字化けするので気付きました。デコードができるかどうかの自動テストをする分には支障ないということでスルーすることにしました。それをメンテナに説明し、無事にPRはマージされました。

Discussion