今天在測試node.js時,response出來的中文變成亂碼,在網路上找了一些文件及自己最後解決方式,記錄一下。
我的情形是這樣的,我在Windows上的docker有跑一個node.js,中文顯示是正常的;我在Cloud上跑的node.js,中文顯示是亂碼。但是程式碼內容是一樣的。
Cloud上安裝是Debian GNU/Linux 9 (stretch)
網路上有提到文件需要是utf-8的格式,所以我在Cloud上檢查我的app.js檔:
# file -i app.js
app.js: text/plain; charset=utf-8
文件是utf-8,內容也是utf-8,所以原則上應該是沒有問題的。
另一個需要注意的是header,所以我在app.js上加上下列:
res.header("Content-Type", "application/json; charset=utf-8");
但是response的中文還是亂碼,最後發現是我的ssh client的問題。
因為Cloud上沒有辦法輸入中文,所以我是先在Windows的vs code編輯好後再複製程式碼貼到Cloud上。
我使用的是xshell來連線Cloud,需要在「檔案」->「內容」,找到「終端機」的設定頁,將編碼改為UTF-8
這樣貼上程式碼時才會是UTF-8,重啟cloud上的node.js後中文就可以正常顯示了。