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

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

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

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Node.js

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

7878閲覧

Node.jsのjschardetとIconvを使った文字コード変換が、Windowsでのみ出来ない

kysk

総合スコア10

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Node.js

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/04/30 08:57

編集2016/04/30 09:00

◆やりたいこと
Electron(html+css+javascript)でCSVファイル(文字コードはShift-JIS)を、
文字化けさせずに読み込みたいです。

◆現状
http://qiita.com/shoma2da/items/c77ec534dd36873d73c9
上記URLを参考にして実装した結果、
・MacではShift-JISのCSVファイルを文字化けさせずに読み込むことが出来ました。
・しかし、Windowsで動かすと動作が止まってしまう状態です。
※WindowsのOSはWindows10です。

◆コードと、処理が止まる箇所

var fs = require('fs'); var Iconv = require('iconv').Iconv; var jschardet = require('jschardet'); function readFile_test(filePath) { fs.readFile(filePath, function (error, data) { if (error != null) { alert('error : ' + error); return ; } var notUtf8String = data; alert(notUtf8String);//表示される。※ここまでは動いている。 var detectResult = jschardet.detect(notUtf8String); alert(detectResult.encoding);//文字コードを表示(Windowsでは表示されない。)※ここで処理が止まる var iconv = new Iconv(detectResult.encoding,'UTF-8//TRANSLIT//IGNORE'); var convertedString = iconv.convert(notUtf8String).toString(); alert(convertedString);//文字コード変換後のデータ表示 }); }

※読み込んだデータの文字コードをjschardetで判別し、
Iconvで文字コードをUTF-8に変換しています。

◆他に試したこと
下記のようにjschardetを使わずShit-JIS→UTF-8への変換に限定した場合でも、
Windowsでのみ途中で止まってしまう状況です。

var fs = require('fs'); var Iconv = require('iconv').Iconv; var jschardet = require('jschardet'); function readFile_test(filePath) { fs.readFile(filePath, function (error, data) { if (error != null) { alert('error : ' + error); return ; } alert(data);//表示される。※ここまでは動いている。 var iconv = new Iconv('SHIFT_JIS','UTF-8//TRANSLIT//IGNORE'); var convertedString = iconv.convert(data).toString(); alert(convertedString);//文字コード変換後のデータ表示(Windowsでは表示されない。)※ここで処理が止まる。 }); }

尚、jschardetとiconvは、ターミナルに下記を入力してインストールしました。

npm install jschardet npm install iconv


この症状の原因と対策をご教授いただけると嬉しいです。m(_ _)m

また、やりたいことは
・Shif-JISのCSVファイルを、Javascriptで文字化けさせずに読み込むこと
ですので、別な実現方法がある場合も教えていただけると嬉しく思います。

よろしくお願い致します。m(_ _)m

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

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

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

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

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

guest

回答2

0

ベストアンサー

iconvライブラリが正常に入っていないのではないかと思われます。Elecrtron経由では無く、nodeのみで実行してもiconvがうまくいってないのか確認して下さい。

下記は確認用のサンプルです。手元のWindows10では正常に動作しました。ファイルを適当な名前で保存し、'test_sjis.txt'部分をShift_JISのファイルに書き換えて下さい。(面倒だったのでCoffeeScriptからの変換で作成してますが、気にしないで下さい)

JavaScript

1// Generated by CoffeeScript 1.10.0 2(function() { 3 var Iconv, fs, readFile_test; 4 5 fs = require('fs'); 6 7 Iconv = require('iconv').Iconv; 8 9 readFile_test = function(filePath) { 10 return fs.readFile(filePath, function(error, data) { 11 var convertedString, iconv; 12 if (error != null) { 13 console.log("error: " + error); 14 return; 15 } 16 console.log(data); 17 iconv = new Iconv('SHIFT_JIS', 'UTF-8//TRANSLIT//IGNORE'); 18 convertedString = iconv.convert(data).toString(); 19 return console.log(convertedString); 20 }); 21 }; 22 23 readFile_test('test_sjis.txt'); // ここは実際のファイル名に書き換えて下さい。 24 25}).call(this);

もし、上のコードでもうまくいかなかったら、iconvを入れ直してみて、インストール時にエラーが無かったかを確認して下さい(VS2015だとnode-gypでのコンパイル時に警告はたくさん出ますけど、警告は無視していいです)。その他、Windows、node、node-gyp、Python、Visual C++(Visual Studio)などのバージョン情報があれば何かわかるかも知れません。

投稿2016/05/01 04:02

編集2016/05/01 04:03
raccy

総合スコア21735

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

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

kysk

2016/05/04 07:09

ご回答ありがとうございます! サンプルの作成と稼働テストまで行って頂いて大変嬉しく思います。 確認用のサンプルを実行させていただいたところ、 同じくMacで動かすと正常に動作し、Windowsで動かすと反応しない、といった状況でした。m(_ _)m >Elecrtron経由では無く、nodeのみで実行してもiconvがうまくいってないのか確認して下さい。 nodeのみで実行する方法が分からないのですが、 以下の手順でデバッグしてみました。 1.Visual Studio Codeでデバッグ画面を開いて左上の▶︎をクリック →https://i.gyazo.com/b4dc0f52f484afa9a2fb2a2497f27f7c.png 2.Node.jsを選択 →https://i.gyazo.com/7eacf384af5f5ba27084362613f366bd.png 3.左上の▶︎をクリック →https://i.gyazo.com/87c4e9964464b29e0da5e6cb499ad6ce.png ※ここでappがないという表示が出ているのですが、  下記でElectronを導入した直後のものを実行しても、同様のエラーが出ました。  http://qiita.com/nyanchu/items/15d514d9b9f87e5c0a29 4.一応 npm install app でappを入れてみました。 →https://i.gyazo.com/73321e55d1cded3280eb83e1c06e58f1.png ※別のエラーが出て、これはnpm install utilでは改善されませんでした。 ご指示のあった「nodeのみで実行して」というのが正しく行えていないのだと思っています。 nodeのみで実行する方法を自分で調べても分からなかったので、 初歩的な質問で誠に恐縮なのですが、手順を教えていただけると嬉しいですm(_ _)m ※参考URLだけでも助かりますm(_ _)m >iconvを入れ直してみて、インストール時にエラーが無かったかを確認して下さい 念のため入れ直してみたところ、 npm WARN フォルダ名@1.0.0 No description npm WARN フォルダ名@1.0.0 No repository field. という警告だけでエラーは出ていませんでした。 何か分かりましたらご教授いただけると嬉しいです。
raccy

2016/05/04 08:41

npmがあるということは普通にnode.jsも入っていると思います。適当なファイル名(test.jsとか)で保存して、コマンドプロンプト等で node test.js と実行できませんでしょうか?
guest

0

原因と直接関係あるかわかりませんが、あと、Electron、については詳しくないので...と前置きさせていただき、

気になったのは、
Node.js
の場合には、

alert('error : ' + error);

ではなく、

console.log('error : ' + error);

ではないと、まずいような気がします。(alert関数は定義されていないかと、)
コンソールのログに、

ReferenceError: alert is not defined

などが、出ていて止まっていたりしませんでしょうか???

ただ、投稿をよみとOSXで動いているとの事なので、原因は別かもしれません。

投稿2016/05/01 03:02

ItoTomonori

総合スコア1283

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

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

kysk

2016/05/02 05:25

ご回答ありがとうございます! alertをconsole.logに修正しましたが、 残念ながら症状の改善には至りませんでした。m(_ _)m Node.jsではalert関数は定義されていないのですね。 ただ、Electronで動かすとalertでポップアップが出ていたので、 ElectronでNode.jsを使えばalert自体は動くみたいです。 ※私もElectronにまだ詳しくなくて、よくは分かっていないのですが。汗 しかし今後は念のためalertではなくconsole.logを使おうと思います。 ありがとうございました!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問