【问题标题】:nodejs special characters encoding issue only when hosted in IIS with iisnode module仅当使用 iisnode 模块托管在 IIS 中时,nodejs 特殊字符编码问题
【发布时间】: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


【解决方案1】:

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

绝对值得注意 - 进一步接收此请求的 API 是 Facebook Conversions API -> https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api#verify。它不会将请求作为“application/json”处理,而是将“application/x-www-form-urlencoded”处理为带有包含json对象的表单数据请求以及设置为“json”的facebook参数“format”。 Content-Type "application/json" 在技术上适用于此 API 调用,但特殊字符与 "unknown char 问号" 符号一起保存。在标头中设置“Accept-Language”或在请求中设置 facebook“locale”参数不适用于此 API 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多