仅当使用 iisnode 模块托管在 IIS 中时,nodejs 特殊字符编码问题

nodejs special characters encoding issue only when hosted in IIS with iisnode module

通过以下设置使用 express 和 body-parser:

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 body 请求输出 - 当服务器 运行 直接使用 npm start:

关于可能发生的事情的提示: https://www.i18nqa.com/debug/bug-utf-8-latin1.html

有人知道去哪里找吗?

找到问题了,这个问题可能简单又愚蠢。我会 post 无论如何,因为我花了很多时间在错误的地方寻找。问题被分开了。用于查看服务器上记录的请求的 baretail 应用程序是 运行,带有 ANSI 字符集。将其更改为 UTF-8 可在屏幕上正确显示特殊字符。进一步接收此请求的 API 将特殊字符保存为“未知字符” - 让我开始查看 nodejs 服务器上已经出现的问题。

绝对值得注意 - 进一步接收此请求的 API 是 Facebook 转化 API -> https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api#verify。它不会将请求处理为 'application/json',而是 'application/x-www-form-urlencoded',其中 form-data 请求包含 json object 以及 facebook 参数“格式”设置为“json”。 Content-Type “application/json”在技术上适用于此 API-call 但特殊字符与“未知字符问号”符号一起保存。在 header 中设置“Accept-Language”或请求中的 facebook“区域设置”参数不适用于此 API-call。