2013-04-28 19 views
17

Làm cách nào để nhận hỗ trợ UTF-8 trên API của tôi? Tại thời điểm này, một chuỗi kết quả đầu ra như thế này:Làm thế nào để có được UTF-8 trong Node.js?

name: "John D�m" 

Thay vì:

name: "John Döm" 

Thanh toán app.js dưới đây:

var express = require('express'), 
    driver = require('./driver'); 

var app = express(); 

app.configure(function() { 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
}); 

app.get('/drivers', driver.findAll); 

app.listen(3000); 
console.log('Up: http://127.0.0.1:3000/'); 
+3

Tất cả các chuỗi trong JS là UTF8 trừ khi rõ ràng thiết lập để cái gì khác, vì vậy rất khó để nói đâu bạn lỗi sẽ đến từ. 'Trình điều khiển' làm gì? Mã bạn đã cung cấp là bản mẫu chuẩn và không thực sự hữu ích. – loganfsmyth

+0

'trình điều khiển' lấy tất cả các trình điều khiển từ một mongoDB và in tất cả dữ liệu ra. Xem liên kết tại đây: http://xn--billstrm-t4a.se:1337/ – Jack

+0

@loganfsmyth 'driver = require ('./ driver');' Có khá nhiều giống như cái này: https: // gist. github.com/ccoenraets/3819468#file-wines-js – Jack

Trả lời

29

Hook vào bạn hưởng ứng máy phát điện hoặc tạo một middleware làm như sau:

res.header("Content-Type", "application/json; charset=utf-8"); 

Nếu không, trình duyệt sẽ hiển thị nội dung bằng mã hóa yêu thích của anh ấy.

Nếu điều này không giúp bạn DB có thể là mã hóa sai.

Chỉnh sửa: Vì câu trả lời là gần 5 tuổi nên API đã thay đổi. Đối với Node.js hiện các phiên bản sử dụng:

res.setHeader("Content-Type", "application/json; charset=utf-8"); 
+1

'res.charset = 'utf-8'' là giống nhau, phải không? Tôi tìm thấy nó sạch hơn – franzlorenzon

+1

res.charset đã không làm việc cho tôi (nodejs 0.10.8) nhưng json-phong cách làm việc: http://pastebin.com/NwcVEAra – loloof64

+0

Câu trả lời này vẫn chính xác? ... Tôi đang gặp khó khăn trong mã của mình ... Tôi tiếp tục nhận được marks ... –

-4

Vấn đề của tôi được giải quyết với điều này:

res.writeHeader(200 , {"Content-Type" : "text/html; charset=utf-8"});

+2

Điều này có thể dẫn đến các sự cố, nếu bạn muốn trả lại nội dung nhưng mã trạng thái HTTP khác thì '200'. – TheHippo