Twitter を見てると、自分が住んでいる地域の新型コロナウイルス感染症対策サイト (非公式 fork) ができたというのが流れてました。
stopcovid19-ichikawa.netlify.app
このサイトのデータは市のサイトから取得しているようなのですが、どうもそこの文字コードが Shift_JIS なせいで Google SpreadSheet の importhtml では文字化けしてしまうとのことでした。
【エンジニアさん向け】
— 本八幡bot🐸コロナ対策クラウドファンディング中 (@motoyawata__bot) 2020年5月29日
市川市の学生さんが作った対策サイト、文字化け問題で困っているようです…!
これは感染者データを取得するスプレッドシートですが、importhtmlでの取得時に化けてしまうようです😫https://t.co/sOWXvLPEFa
リポジトリはこちら!お時間あれば是非!https://t.co/EcCpBnVaKh
ツイートのリプには GAS を使ってスマートに解決する方法が提示されているのですが、自分はそこにフックさせる方法を知らなかったため、文字コード変換する Netlify Functions を書くというパワープレイをしてみました。
中身は単に node-fetch で HTML を取得して、それを encoding.js で UTF-8 に変換して返すだけです。
これを Netlify にデプロイして、この Netlify Functions 経由で目的のページを取得すると、Shift_JIS で書かれた HTML も UTF-8 に変換されて、文字化けせずに読み込めることを確認しました。
Netlify 面白いですね。