質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

9234閲覧

Node.jsでCSV保存時に文字コード設定

arasi

総合スコア156

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/10/20 01:36

var csv = require('csv'); var fs = require("fs"); function appendFile(path, data) { fs.appendFile(path, data, function (err) { if (err) { throw err; } }); } url="test.csv"; appendFile(url, "\""); appendFile(url, "id"); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\n"); for(var i=0;i<test_array.length;i++){ testcsv = test_array[i]; appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.category_title); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.content_title); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\n"); } } res.redirect('test.csv');

CSVファイルを作成してURL先に行きダウンロードができたのですが、この時に文字コードををShift-JisかUTF-8 BOM付きにしたいのですが何を付ければUTF-8 BOM付きとして認識されるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

nodeはそれほど豊富な種類のエンコーディングをサポートしてなかった気がします。Shift-Jis(Microsfotのものであれ他のものであれ)は対応ライブラリーは存在するとは思いますが標準では組み込まれてないと思います。そこで、UTF-8 BOM付きファイルを生成するとします。

fsモジュールのエンコーディングはデフォルトでutf8なので、先頭へBOM(U+FEFF)を書き込んでやるとUTF-8 BOM付きのファイルができます。

質問者さんのappendFile関数に倣ってBOMを書き込む関数を定義しておくなら

javascript

1var fs = require('fs'); 2 3function writeBOM(path) { 4 fs.writeFile(path, '\uFEFF', function (err) { 5 if (err) { 6 throw err; 7 } 8 }); 9} 10 11function appendFile(path, data) { ... } 12 13var csvpath = 'test.csv'; 14 15writeBOM(csvPath); 16appendFile(csvPath, "あいう,abc\r\n");

Windowsでメモ帳やExcelなどで開くと文字化けせずに中身が表示されると思います。

投稿2017/10/20 02:34

編集2017/10/20 03:07
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arasi

2017/10/20 02:41

ありがとうございます。CSVファイルをUTF-8 BOM付きで保存できました。
guest

0

var csv = require('csv'); var fs = require("fs"); function writeBOM(path) { fs.writeFile(path, '\uFEFF', function (err) { if (err) { throw err; } }); } function appendFile(path, data) { fs.appendFile(path, data, function (err) { if (err) { throw err; } }); } url="test.csv"; writeBOM(url); appendFile(url, "\""); appendFile(url, "id"); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, ""); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\n"); for(var i=0;i<test_array.length;i++){ testcsv = test_array[i]; appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.category_title); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.content_title); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\""); appendFile(url, testcsv.); appendFile(url, "\""); appendFile(url, ","); appendFile(url, "\n"); } } res.redirect('test.csv');

投稿2017/10/20 02:44

arasi

総合スコア156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問