2013-04-15 67 views
3

我將POST數據從Python程序發送到Node.JS服務器,並使用res.end返回。這裏的Python代碼:獲取POST數據並返回res.end() - 編碼問題

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import requests 
value = u"Этот текст в кодировке Unicode" 
url = "http://localhost:3000/?source=test" 
headers = {'content-type': 'text/plain; charset=utf-8'} 
r = requests.post(url, data=value.encode("utf-8")) 
print r.text 

這裏就是我如何處理在Node.js的數據:

http.createServer(function(req, res) { 
    req.setEncoding = "utf8" 
    var queryData = ''; 
    if (req.method == 'POST') { 
     req.on('data', function(data) { 
      queryData += data; 
     }); 
     req.on('end', function() { 
      res.writeHead(200, { 
       'Content-Type': 'text/plain' 
      }); 
      res.end(queryData) 
     }); 

    } else { 
     // sending '405 - Method not allowed' if GET 
     res.writeHead(405, { 
      'Content-Type': 'text/plain' 
     }); 
     res.end(); 
    } 
}).listen(3000, '127.0.0.1'); 

至於結果,我得到:

$ python test.py 
ЭÑÐ¾Ñ ÑекÑÑ Ð² кодиÑовке Unicode 

我應該如何設置編碼正確獲得「ЭтоттекствкодировкеUnicode」作爲結果?謝謝。

+0

的編碼應當是正確的,我還沒有處理蟒蛇很多,但它可能是一個問題在不打印unicode的返回側?我認爲雖然第二個散列設置python默認爲uft8進行打印。 – travis

+0

節點部分看起來沒問題。如果你用'curl'或'wget'發帖? (對我來說它工作正常,我敢打賭這是python的問題。)在旁註中,unicode不是編碼,utf8是。 – elmigranto

+0

@elmigranto如果我用CURL POST,一切正常。但是,我試圖用python交互式shell進行請求。 >>> r.headers ['Content-Encoding'] 'utf-8',如果我得到>>> r.encoding 'ISO-8859-1' – f1nn

回答

3

您需要設置返回數據的字符集:

res.writeHead(200, { 
    'Content-Type': 'text/plain; charset=utf-8' 
}); 

在頂部,你正在設置未來數據的「解碼」,但從來沒有設置傳出響應。

+0

首先看看您的解決方案在Python交互式shell中的工作。讓我檢查一下生產,如果沒問題,我會將你的答案標記爲已解決) – f1nn

1

setEncoding在Node.js的是這樣的方法,以便代替=的使用下面的:

req.setEncoding('utf8');

參見例如這裏: http://nodejs.org/api/http.html

+0

我已經在第二行完成了。 – f1nn

+1

在代碼的Node.JS部分中,您有:'req.setEncoding =「utf8」'您可以嘗試將其更改爲req.setEncoding('utf8'); –