2016-12-20 66 views
1

稍微介紹一下 - 我正在開發的(wannabe)軟件是建立在Github Electron上的桌面應用程序。它被設計成具有兩個模塊 - 一個UI和一個帶有API的後端,第二個「活着」在一個隱藏的瀏覽器窗口中並在ExpressJS上運行。這個想法是爲了讓UI和API通過HTTP進行通信,以便在需要時可以將它們分離。所有文件都是UTF-8。UTF8字符作爲windows-1252運行,運行在Electron上的ExpressJS

現在的問題本身 - 主要的API路線是這樣的:

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

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

當被稱爲(從瀏覽器,或郵差,或其他),得到的答案是這樣的:

{"message":"ЗдраÑти, коко!"} 

......這些標題:

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 

使用2cyr工具,我發現,源編碼是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

所以我們現在就在電子倉庫發佈一個問題之前,這是我能想象到的最愚蠢的錯誤。

TL; DR:

<meta charset="utf-8"> 

我的想法是,對後端打開第二個瀏覽器窗口,並把在它運行一些JavaScript就足夠了。我忘記的是,它實際上仍然是一個瀏覽器窗口,因此它只需要一點點HTML就可以讓它知道它服務於UTF-8的內容。

也許這不是我,也許我期望Express可以通過HTTP服務於UTF-8,但是不會。無論如何,現在一切正常。