3

我将 POST 数据从 Python 程序发送到 Node.JS-server 并返回 res.end。这是python代码:

#! /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”?谢谢。

4

2 回答 2

4

您需要设置返回数据的字符集:

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

在顶部,您正在设置即将到来的数据的“解码”,但从不设置输出响应。

于 2013-04-15T19:48:14.290 回答
1

Node.JS 中的 setEncoding 是一种方法,因此请使用以下方法代替 =:

req.setEncoding('utf8');

请参阅此处的示例: http ://nodejs.org/api/http.html

于 2013-04-15T21:24:48.130 回答