https://www.npmjs.com/package/encoding-japanese
こちらのライブりを使って、変数に格納されたSJISの文字列をUTF8の文字列に変換しようとしたのですが、うまくできませんでした...。
js
1let text = 'あ' // 実際textはエクセルからインポートされた文字列でSJISです 2text = Encoding.convert(text, { to: 'UTF8', from: 'SJIS', type: 'string' })
はじめこれでできるのかなと思ったのですが、"?"が返ってきます。
こちらのページでは文字列は
var utf8String = 'ã\u0081\u0093ã\u0082\u0093ã\u0081«ã\u0081¡ã\u0081¯';
こんな風になってます。
これは一体どういった形式なのでしょうか。
textをこの形式に一旦変換してからEncoding.convertしてみようかなと思うのですが、それは可能なのでしょうか。
追記
js
1 2// textはSJISの"あ" 3 4text = convertSjisStrToUtf8Str(text) // => [63] 5 6const convertSjisStrToUtf8Str = (sjisStr) => { 7 let ary = [] 8 for (let index = 0; index < sjisStr.length; index++) { 9 ary.push(sjisStr.charCodeAt(index)) 10 } 11 return Encoding.convert(ary, 'UNICODE', 'SJIS') 12}
追記
SJISのファイルの作り方
js
1// 参考サイト 2// https://photo-tea.com/p/17/nodejs-write-excel-tsv-csv/ 3// fsじゃなくてfs-extraを使ってます 4import * as fs from 'fs-extra' 5import iconv from 'iconv-lite' 6let csvStr = 'あ' 7fs.writeFileSync(outputFilePath, '') 8let fd = fs.openSync(outputFilePath, 'w') 9let buf = iconv.encode(csvStr, 'Shift_JIS') 10await fs.writeSync(fd, buf, 0, buf.length)
「実際textはエクセルからインポートされた文字列でSJISです」とありますが、textの型はなんですか?
ストリングです!
内部的なデータ形式がSJISになってます。
なのでそのまま画面に出すと文字化けします
当該ライブラリのexampleにあるように、UNICODEで書き出すのではダメなのですか?
大丈夫です。
追記も加えてみたので良かったらみてみてください...。
でも文字化け後のテキストから本来のテキストを取り出すのは無理という記事も見つけました
http://var.blog.jp/archives/71651044.html
csvからのデータのインポートからやり直さなければいけないのでしょうか
ちなみにデータのインポートは
https://www.npmjs.com/package/csvtojson
こちらのライブラリを使っております...
当方とは違う結果でした。
textの中身がなんか違いそうですね……
なるほどです
csvファイルの作り方を追記します
そっちに問題があるのかもしれないです
あ、text.length が 1 なんじゃないですかね?
だとすると、Uint16Arrayで受けて、Arraybuffer にするのはどうでしょう?
すみません、
Uint16Arrayで受ける?とはどのような意味でしょうか(T_T)
https://gist.github.com/kawanet/352a2ed1d1656816b2bc
記事見つけました、すみません...
すみません、ちょっと使い方が分かりません(T_T)
回答1件
あなたの回答
tips
プレビュー