2022年8月3日 • ☕️ 1 min read

shift-jisの日本の祝日データをfetch/axiosで読み込むのに、文字化けにちょっと苦労しました。インターネットからshift-jisのファイルを取り込む方法を記録しておきます。

共通部分

まずファイルをarraybufferに読み込む必要があります。理由はフロント側も、nodejs側も、TextDecoderを使えば簡単に文字コードを指定して読み込めるからです。

arraybufferのデータをdecodeする関数。

Copy
function decodeShiftJis(data: ArrayBuffer): string {
  return new TextDecoder("shift-jis").decode(data);
}

fetch

Copy
const data: ArrayBuffer = await fetch(
  'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv',
).then((response) => response.arrayBuffer());

axios

Copy
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

Copy
await fetch('https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv')
  .then((response) => response.arrayBuffer())
  .then((data) => new TextDecoder('shift-jis').decode(data));

ThunderMiracle

Blog part of ThunderMiracle.com