JS で UTF8 を SJIS に変換する
csv のダウンロードをする際に、文字コードの変換をしたくて下記のライブラリを使用しました。
日本語の Readme はこちら。
yarn で install をして、Github に記載されているサンプルコードをベースに問題なく動きました。
変換したい文字列を Unicode 値の配列に変換して、それを convert に渡します。
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_JIS・EUC-JP・JISに変換できない文字は ? に変換されますが、オプションとして数値文字参照に変換できるようにします。