shift-jisの日本の祝日データをfetch/axiosで読み込むのに、文字化けにちょっと苦労しました。インターネットからshift-jisのファイルを取り込む方法を記録しておきます。
共通部分
まずファイルをarraybufferに読み込む必要があります。理由はフロント側も、nodejs側も、TextDecoder
を使えば簡単に文字コードを指定して読み込めるからです。
arraybufferのデータをdecodeする関数。
function decodeShiftJis(data: ArrayBuffer): string {
return new TextDecoder("shift-jis").decode(data);
}
fetch
const data: ArrayBuffer = await fetch(
'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv',
).then((response) => response.arrayBuffer());
axios
const data: ArrayBuffer = await axios.get(
'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv',
{ responseType: 'arraybuffer' },
);
確認
fetchならChromeのdev toolsでも確認できます。内閣府のウェブサイトへアクセスして下記のスクリプトをdev toolsの中に叩いたら確認を取れました。
https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
await fetch('https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv')
.then((response) => response.arrayBuffer())
.then((data) => new TextDecoder('shift-jis').decode(data));