2015-10-05 18 views
7

我做的對Web服務的下列請求(使用請求/請求):Node.js的要求變成變音符號來

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(); 

無論我做什麼,變音符號都變成

這些都是頭Web服務發送回:

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

我沒有運氣可言嘗試這幾天。我究竟做錯了什麼?

這裏的問題/答案的列表,並沒有解決我的問題至今:

它可以是下列之一引起我的輸入字符串不爲UTF-8?

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

簽名者是含有0-9a-zA-Z+,和/的字符串。

this.query['Signature']是URL的一部分。

+0

什麼是您要發送的確切字符?他們目前的編碼方式如何,當前的字符集是什麼? – zerkms

+0

在元音變「仍」變音符的地方。 – zerkms

+0

「節點js請求將元音變成 」「無論我做什麼,變音都變成 。」 ---這些短語意味着什麼? – zerkms

回答

7

我終於解決了它,使用iconv-lite和設置請求的編碼1到null,使它作爲Buffer返回主體。這是我現在的工作配置:

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

相關:http://stackoverflow.com/questions/12040643/nodejs-encoding-using-request –