Node.js nodejs特殊字符编码问题仅当托管在带有iisnode模块的IIS中时出现

Node.js nodejs特殊字符编码问题仅当托管在带有iisnode模块的IIS中时出现,node.js,facebook-graph-api,encoding,utf-8,facebook-business-sdk,Node.js,Facebook Graph Api,Encoding,Utf 8,Facebook Business Sdk,通过以下设置使用express和body解析器: const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json({limit: '100mb', extended: true,type: 'application/*+json;charset=utf-8'})) app.use(bodyParser.url

通过以下设置使用express和body解析器:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json({limit: '100mb', extended: true,type: 'application/*+json;charset=utf-8'}))
app.use(bodyParser.urlencoded({limit: '100mb', extended: true}));
app.use(bodyParser.text({defaultCharset: 'utf-8'}));
app.use(express.json());
使用npm start运行nodejs服务器时,json正文中的特殊字符按预期进行utf-8编码。一旦托管在IIS中,字符编码就会失败。唯一的区别是托管环境。对于承载具有“utf-8”设置的nodejs服务器应用程序的IIS站点,.NET全球化选项设置正确,没有任何区别。仔细检查web.config。什么可能会弄乱传入的请求数据

json正文请求输出-当nodejs托管在IIS中时

json正文请求输出-直接使用npm start运行服务器时:

关于可能发生的事情的提示:


有人知道该去哪里找吗?

发现了这个问题,它可能很简单,也很愚蠢。无论如何我都会把它贴出来,因为我花了很多时间在错误的地方寻找。问题有分歧。用于查看服务器上记录的请求的裸尾应用程序是使用ANSI字符集运行的。将其更改为UTF-8可在屏幕上正确显示特殊字符。进一步接收此请求的API将特殊字符保存为“未知字符”——这使我开始研究nodejs服务器上出现的问题


绝对值得注意-进一步接收此请求的API是Facebook转换API->。它不以“application/json”的形式处理请求,而是以“application/x-www-form-urlencoded”的形式处理请求,其中的表单数据请求包含json对象以及设置为“json”的facebook参数“format”。内容类型“application/json”在技术上适用于此API调用,但特殊字符用“unknown char问号”符号保存。在标头中设置“Accept Language”或在请求中设置facebook“locale”参数对此API调用不起作用。

我怀疑这可能是由于未正确指定字符编码造成的,请尝试将其转换为ISO-8859-1编码。使用“iconv”进行了尝试将ISO-8859-1转换为UTF-8:Sjofartøƒƒƒ¥-ÆÃ…看起来每个“字符”后面都添加了“Ô。如果我从UTF-8转换到ISO-8859-1,它会变得更加奇怪:Sjofartï½ï½ï½ï½ï½ï½ï½ï½ïï½ï½ï½ïï½ï½ï½ïï½½,其中UTF-8字节被解释为Windows-1252或ISO-8859-1字节。只是不知道从哪里开始找