2015-10-05 13 views
7

tôi đang làm theo yêu cầu sau (sử dụng yêu cầu/yêu cầu) chống lại một dịch vụ web:yêu cầu Node.js biến umlauts để

return request.postAsync({ 
    url, 
    charset: 'Cp1252', // I also tried utf-8 
    encoding: null, // 
    // I also tried Cp1252 -> unknown encoding, 
    // I also tried utf-8 and nothing at all 
    headers: { 
     "Accept": "application/octet-stream, text, text/plain, text/xml", 
     "Accept-Encoding": "UTF-8", 
     'Content-Type': "text/plain; charset=Cp1252;", // also tried utf-8, ISO-8859-1 
     "User-Agent": "me" 
    } 
}).spread((res, body) => { 
    body = body.toString(); // I also tried without toString(); 
    let ws = fs.createWriteStream('hhh.csv'); 
    ws.write(body); 
    ws.end(); 

Dù tôi làm, umlauts được biến thành .

Đó là những tiêu đề các dịch vụ web gửi lại:

'content-type': 'text; charset=Cp1252', 
'content-length': '1895980', 
vary: 'Accept-Encoding,User-Agent' 

Tôi đang cố gắng này trong nhiều ngày không có may mắn chút nào. Tôi đang làm gì sai?

Dưới đây là một danh sách các câu hỏi/câu trả lời mà không giải quyết vấn đề của tôi cho đến nay:

Nó có thể được rằng một trong những điều sau đây gây ra chuỗi đầu vào của tôi không được UTF-8?

let hash = crypto.createHmac("sha256", this.options.Signer); 
this.query['Signature'] = hash.update(stringToSign).digest("base64"); 

ký là một chuỗi chứa 0-9, a-z, A-Z, +, và /.

this.query['Signature'] là một phần của URL.

+0

Các ký tự chính xác bạn đang gửi là gì? Chúng hiện được mã hóa như thế nào và ký tự hiện tại được đặt cho chúng là gì? – zerkms

+0

Ở nơi mà âm sắc là "vẫn" umlaut. – zerkms

+0

"nút js yêu cầu biến umlauts thành " "Dù tôi làm gì, các dấu mũ được chuyển thành ." --- những cụm từ này có ý nghĩa gì? – zerkms

Trả lời

7

Cuối cùng tôi đã giải quyết nó, sử dụng iconv-lite và thiết lập mã hóa yêu cầu¹ thành null, làm cho nó trả về phần thân dưới dạng Bộ đệm. Đây là cấu hình hiện đang hoạt động của tôi:

return request.getAsync({ 
     url, 
     encoding: null, 
     headers: { 
      "Accept": "text, text/plain, text/xml", 
      "Accept-Encoding": "UTF-8", 
      'Content-Type': "text/plain; charset=utf-8;", 
      "User-Agent": "me" 
     } 
    }).spread((res, body) => { 
     let a = iconv.decode(new Buffer(body), 'cp1252'); 
     // now a is holding a string with correct Umlauts and ß 
+0

http://www.utf8everywhere.org/ – zerkms

+1

liên quan: http://stackoverflow.com/questions/12040643/nodejs-encoding-using-request –

Các vấn đề liên quan