bunty's blog

ググったこととか勉強したことのメモ

JS で UTF8 を SJIS に変換する

csv のダウンロードをする際に、文字コードの変換をしたくて下記のライブラリを使用しました。

github.com

日本語の Readme はこちら。

github.com

yarn で install をして、Github に記載されているサンプルコードをベースに問題なく動きました。

変換したい文字列を Unicode 値の配列に変換して、それを convert に渡します。

stackoverflow.com

const str = '変換したい文字列'
const arr = []
for (let i = 0; i < str.length; i++) {
  arr.push(str.charCodeAt(i))
}

const sjis = Encoding.convert(arr, {
  to: 'SJIS',
  from: Encoding.detect(str)
})
return new Uint8Array(sjis)

注意点

SJIS に変換をする際に、SJIS に対応していない文字列が含まれている場合には、? に置換されるようです。

そのため に自動で変換はできず、必要に応じて replace する処理を追加する必要がありました。

"ほげ−ふが".replace(/[‐-―ー−]/g, 'ー')

絵文字などが入っている場合には全部 ? になるため、必要に応じて ? は全て置換してしまうのが良いかもしれません。ここら辺は変換後のデータをどう扱いたいかとそもそもどんなデータが入力されるのかに夜かと思います。

"変換後の文字列".replace(/\?/u, '')

変換できない文字列の扱い

ちょうどこの PR が作成されていることに気がついたので、メモとして残しておくきます。

マージされるかはわかりませんが、下記のような動作をするそうです。

現在の仕様では、Shift_JISEUC-JP・JISに変換できない文字は ? に変換されますが、オプションとして数値文字参照に変換できるようにします。

github.com