Как опубликовать не-ascii данные в Campfire?
Вот тестовое приложение Node.js:
body = {
"message": {
"body": "hello", //it works
// "body":"привет", //doesn't work
"type":"TextMessage"
}
};
body = JSON.stringify(body);
headers = {
'Authorization': 'Basic ' + B64TOKEN,
'Host': SUBDOMAIN + '.campfirenow.com',
'Content-Type': 'application/json; charset=UTF-8',
'Content-Length': body.length
}
opts = {
host: SUBDOMAIN + '.campfirenow.com',
port: 443,
method: 'POST',
path: '/room/' + TEST_ROOM + '/speak.json',
headers: headers
}
request = require('https').request(opts, function(response) {
var data;
data = '';
response.setEncoding('utf8');
response.on('data', function(chunk) {
return data += chunk;
});
return response.on('end', function() {
console.log("===== start responce");
console.log(data);
console.log("===== end responce");
});
});
request.end(body);
body
карта это то, что я хочу отправить. И вы можете увидеть это с "hello"
это работает (то есть сообщение отправлено в чат у костра), но с "привет"
как тело - возникает ошибка... Во втором случае я получил длинный ответ HTML от Campfire... Я думаю, что это можно решить, если я могу отправить body
в строке последовательности Юникод... Вот так: "body":"\u043f\u0440\u0438\u0432\u0435\u0442"
но как?
2 ответа
Решение
Я (и вы) должны сделать это, если вам нужно ответить utf-8:
body = JSON.stringify(body);
buf = new Buffer(body);
headers = {
'Authorization': 'Basic ' + B64TOKEN,
'Host': SUBDOMAIN + '.campfirenow.com',
'Content-Type': 'application/json; charset=UTF-8',
'Content-Length': buf.length
}
// ...
request.end(buf);
Вам нужно использовать буфер. Таким образом, это работает просто отлично.
Hej request.end принимает аргумент кодирования http://nodejs.org/docs/v0.4.12/api/streams.html
установите что-то, поддерживающее ваших персонажей.