【发布时间】:2018-06-06 00:28:37
【问题描述】:
我最近编写了一个 API(C# .net 标准)连接到别人编写的 TCP 服务器。它使用以 HTTP 协议为中心的自定义数据包。读/写数据包时,我使用的是 UTF8 编码。所有使用该 API 的客户端都可以正确连接,无论其区域如何。但是,来自土耳其(地区设置为土耳其)的用户无法使用该 API。当他们将地区更改为美国时,API 可以正常工作。
我的印象是 UTF8 应该是一个通用标准,并且在任何地区都会做出相同的反应。不是这样吗?
测试:
- Windows 10 .net 框架 4.6.1 - 美国 - 成功
- Windows 10 .net 框架 4.6.1 - TR - 失败
- Windows 10 .net core 2.0 - 美国 - 成功
- Windows 10 .net core 2.0 - TR - 失败
编辑:
编码之所以重要,是因为 API 中有一种序列化形式。它使用在数据流开头定义的特殊字符将字符串字典序列化为单个字符串。这些特殊字符会根据流的内容而变化。
【问题讨论】:
-
什么条件定义成功/失败?
-
我已经稍微修改了这个问题,并提供了更多信息来回答您的问题。成功意味着它可以正确反序列化字典。
-
请贴出具体失败的代码,如果没有看到实际执行的代码,我们无法神奇地猜测出什么问题或原因。此外,如果它在 .NET Framework 和 .NET Core 上都失败了,为什么要同时指出它们呢?让您看起来好像看到了不同的行为,而事实并非如此
-
问题不是针对特定的代码行,因为steam没有正确解码导致多点故障。这个问题更多地围绕着 UTF8 在不同地区的反应不同。代码我可以加,但是有很多。
标签: c# encoding utf-8 internationalization