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

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

ただいまの
回答率

90.48%

  • JavaScript

    16986questions

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

  • Node.js

    1935questions

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

  • Windows

    1492questions

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

  • CSV

    671questions

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

  • Electron

    199questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,531

kysk

score 2

◆やりたいこと
 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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

// Generated by CoffeeScript 1.10.0
(function() {
  var Iconv, fs, readFile_test;

  fs = require('fs');

  Iconv = require('iconv').Iconv;

  readFile_test = function(filePath) {
    return fs.readFile(filePath, function(error, data) {
      var convertedString, iconv;
      if (error != null) {
        console.log("error: " + error);
        return;
      }
      console.log(data);
      iconv = new Iconv('SHIFT_JIS', 'UTF-8//TRANSLIT//IGNORE');
      convertedString = iconv.convert(data).toString();
      return console.log(convertedString);
    });
  };

  readFile_test('test_sjis.txt'); // ここは実際のファイル名に書き換えて下さい。

}).call(this);

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/04 16: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.
    という警告だけでエラーは出ていませんでした。

    何か分かりましたらご教授いただけると嬉しいです。

    キャンセル

  • 2016/05/04 17:41

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

    キャンセル

0

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

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

alert('error : ' + error);


ではなく、

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


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

ReferenceError: alert is not defined


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/02 14:25

    ご回答ありがとうございます!

    alertをconsole.logに修正しましたが、
    残念ながら症状の改善には至りませんでした。m(_ _)m

    Node.jsではalert関数は定義されていないのですね。
    ただ、Electronで動かすとalertでポップアップが出ていたので、
    ElectronでNode.jsを使えばalert自体は動くみたいです。

    ※私もElectronにまだ詳しくなくて、よくは分かっていないのですが。汗

    しかし今後は念のためalertではなくconsole.logを使おうと思います。
    ありがとうございました!m(_ _)m

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16986questions

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

  • Node.js

    1935questions

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

  • Windows

    1492questions

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

  • CSV

    671questions

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

  • Electron

    199questions

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