【发布时间】:2020-11-12 12:17:53
【问题描述】:
通过以下设置使用 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
有人知道去哪里看吗?
【问题讨论】:
-
我怀疑这可能是由于没有正确指定字符编码造成的,请尝试将它们转换为 ISO-8859-1 编码。
-
尝试使用“iconv”将 ISO-8859-1 转换为 UTF-8:Sjofart æ ø Ã¥ - Æ ÃÂ~ ÃÂ... 它看起来像“Ô刚刚附加到每个“字符”。如果我从 UTF-8 转换为 ISO-8859-1,它会变得更加陌生:Sjofart � � � - � � �
-
该表解释了可能的原因:i18nqa.com/debug/bug-double-conversion.html 似乎很明显,在正文解析器内部或托管框架中,甚至两者的组合中都发生了错误,其中 UTF-8字节被解释为 Windows-1252 或 ISO-8859-1 字节。只是不知道从哪里开始寻找
标签: node.js facebook-graph-api encoding utf-8 facebook-business-sdk