Я пытаюсь отправить запрос POST на сервер, который декодирует с помощью SHIFT-JIS. Эта строка サービス переводится в 繧オ繝シ繝薙せ после декодирования с помощью SHIFT-JIS. Похоже, что запрос всегда будет кодироваться в UTF-8 всякий раз, когда запрос отправляется. Я использую nodejs для отправки запроса. Вопрос в том, как мне отправить символы в кодировке shift-jis? Это казалось простым, но я просто не мог понять, как это сделать.
Прослушивающий сервер
var iconv = require('iconv-lite');
const http = require('http');
http.createServer((request, response) =>
{
const
{
headers,
method,
url
} = request;
let body = [];
request.on('error', (err) =>
{
console.error(err);
}
).on('data', (chunk) =>
{
body.push(chunk);
}
).on('end', () =>
{
body = Buffer.concat(body).toString();
// BEGINNING OF NEW STUFF
body = iconv.decode(Buffer.from(body), 'shift_jis');
response.on('error', (err) =>
{
console.error(err);
}
);
response.statusCode = 200;
response.setHeader('Content-Type', 'application/json');
// Note: the 2 lines above could be replaced with this next one:
// response.writeHead(200, {'Content-Type': 'application/json'})
const responseBody =
{
headers,
method,
url,
body
};
response.write(JSON.stringify(responseBody));
console.log(body);
console.log(responseBody);
response.end();
// Note: the 2 lines above could be replaced with this next one:
// response.end(JSON.stringify(responseBody))
// END OF NEW STUFF
}
);
}
).listen(8000);
Запрос
var request = require('request');
request({
url: 'http://localhost:8000',
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=shift_jis' },
method: 'POST',
body: 'サービス'
}, function(error, response, body){
if(error) {
console.log(error);
} else {
console.log(response.statusCode, body);
}
});
РЕДАКТИРОВАТЬ: Оказывается, модуль axios, который мы используем для HTTPS POST, будет кодировать полезную нагрузку в UTF-8 перед отправкой запроса. Мы клонировали модуль axios и модифицировали его для кодирования в SHIFT-JIS.
'繧オ繝シ繝薙せ'
выводится из'サービス'.encode('utf-8').decode('shift-jis')
… - person JosefZ   schedule 02.12.2020charset=shift_jis
в заголовках этого не произойдет. Используйте iconv, чтобы фактически преобразовать строку в Shift-JIS. - person deceze♦   schedule 02.12.2020request
для отправки необработанных двоичных данных (представляющих текст в кодировке Shift-JIS). - person deceze♦   schedule 02.12.2020