2016-12-20 5 views
1

少し紹介します - 私が取り組んでいるソフトウェアは、Github Electronで構築されたデスクトップアプリケーションです。これは2つのモジュールを持つように設計されています.UIとバックエンドにはAPIがあり、2番目のモジュールは隠されたブラウザウィンドウにあり、ExpressJS上で動作します。この考え方は、UIとAPIがHTTP経由で通信し、必要に応じてデカップリングできるようにすることです。すべてのファイルはUTF-8です。今UTF8の文字はWindows-1252、ExpressJSはElectron上で動作します。

問題そのもの - メインAPIのルートのようになります。

router.get('/', (request, result) => { 
    let message = 'Здрасти, коко!'; 

    console.log('Answering with ' + message); 
    result.json(message); 
}); 

(ブラウザ、またはポストマン、または何から)呼び出されたとき、答えは次のようになります。

{"message":"ЗдраÑти, коко!"} 
これらのヘッダと

...:2cyrツールを使用して

HTTP/1.1 200 OK 
X-Powered-By: Express 
Content-Type: application/json; charset=utf-8 
Content-Length: 64 
ETag: W/"40-3JawFDiTNEinvN6xFO6T9g" 
Date: Tue, 20 Dec 2016 06:47:53 GMT 
Connection: keep-alive 

は、私はソースことが判明しましたエンコーディングはUTF-8ですが、正しく表示されるのはwindows-1252のみで、これは私を多く混乱させます。

可能性を絞り込むために、console.log()をルートハンドラに追加しました。私はChromiumデバッガと同じ "壊れた"結果を得ています。私は、ファイルのエンコーディングを疑ったが、これは、私はそれについて何を得るです:

Petars-Mac:api petar$ file -I api.js 
api.js: text/x-c++; charset=utf-8 

私の心に来た最後のものは、実際に電子からAPIをデカップリングされました。ノードで端末で実行すると、端末のログメッセージとブラウザのJSON回答の両方で適切な結果が得られます。

私は間違って何をしていますか、それ以上のデバッグは可能でしょうか?

答えて

2

ここで、Electronリポジトリに問題を投稿する直前に、この状況でこれまでに想像することのできない最も愚かなエラーです。

TL; DR:私はバックエンドのための2番目のブラウザウィンドウを開き、その中で実行されるいくつかのJavaScriptを置くことは十分だろうということだと思った何

<meta charset="utf-8"> 

。私が忘れていたのは、実際にはブラウザのウィンドウのままであったため、UTF-8コンテンツを提供することを知らせるにはほんの少しのHTMLしか必要ないということでした。

おそらく、私は、おそらくExpressが、HTTP経由でUTF-8を提供すると期待していたかもしれませんが、とにかく、それはすべて今働く。

関連する問題