【发布时间】:2021-05-02 12:58:35
【问题描述】:
我有一个 azure 函数,即 .net core 3(支持最新版本),它在创建或更新联系人时从 Microsoft Dynamics 365(通用数据服务)接收 JSON。我没有对数据进行任何转换,只是获取 JSON 并将其放入服务总线队列中。问题在于国际字符。例子。名字在 Dynamics 中的数据是
何塞
但是,一旦它到达 Azure Function,它就会变成
何塞
我在读取其中包含的 HTTP 请求正文时删除了我正在执行的任何 UTF-8 编码,但这并没有解决问题。我已经尝试了几件事,甚至在我尝试读取数据之前都无法弄清楚数据发生了什么。
这是我尝试过的。我需要读取 Dynamics 中的数据并将其转换为 UTF-8,因为我发送数据的系统也使用 UTF-8。
原文:
string requestBody = await CommonFactory.StreamReader(req.Body).ReadToEndAsync();
我尝试了以下方法:
string requestBody = await req.Content.ReadAsStringAsync();
dynamic data = await req.Content.ReadAsAsync<object>();
我还尝试查看发送的标头,并且内容类型不包括字符集值。刚刚有
应用程序/json
我希望其他人遇到过使用 .NET 核心进行字符串编码的问题,并能帮助我指明正确的方向。现在,我正在尝试切换到内存流,看看是否有帮助。
【问题讨论】:
-
您检查过服务总线中的消息吗? azure.microsoft.com/en-us/updates/sesrvice-bus-explorer
-
这是在消息到达服务总线之前。当 Dynamics 365 将消息发布到将消息放入服务总线的端点时,就会发生这种情况。当我尝试读取正文数据时会发生这种情况。
-
我正在测试让 Dynamics 将消息直接放在服务总线中,看看那里会发生什么。
-
您能打印出您的 HTTP 触发器函数接收到的标头吗?可能是调用者指定编码。
é是有效的 UTF-8 字符 (\x130)。当您将正文打印为byte[]而不是string时会发生什么?将正文读作byte[]并打印为十六进制以查看它究竟包含什么。同时打印身体的长度/大小。
标签: c# .net-core character-encoding azure-functions