API 的字符集编码

本文关键字:编码 字符集 API | 更新日期: 2023-09-27 18:30:59

我用 Zend Framework 1.x 在 PHP 中构建了一个 API目前只有一个连接到 API 的 Web 客户端,但我们开始开发一个 C# 客户端。我遇到了一个问题,这是它的工作原理:

  • 用户在 C# 客户端中填写表单
  • C# 使用 WebClient.UploadValues 发送数据(添加了一些值,例如参数的 hmac、x-api key 等)。
  • 服务器接收数据
  • serveur 将数据转换为 json 并从中创建 hmac
  • 服务器比较发送的 hmac 和创建的 hmac

这就是我的问题所在。如果我发送没有口音的数据,一切正常。但如果有,Zend_Json::encode($params) 返回一个以 UTF8 编码的 json,因此创建的 hmac 与发送的 hmac 不同。

所以,我想知道(由于某种神秘的原因utf8_decode($json)不起作用,我是否应该找到一种方法来比较utf8解码的json hmac,我应该作为C#客户端发送所有用utf8编码的参数?

API 的字符集编码

C# 客户端应发送以 UTF8 编码的所有参数。您无法在 JSON 中从 Unicode - UTF8 运行,因为 JSON 状态的定义:

JSON 文本应以 Unicode 编码。 默认编码为UTF-8。

它也可能是UTF-16 (BE or LE)UTF-32 (BE or LE).

如果您从数据中生成 JSON,然后获取 hmac,应该会有区别,对吧?因为至少 JSON 还有两个符号? {}那么哈希是否应该与 C# 客户端发送的哈希不同?

要么让客户端以 JSON 格式向您发送数据,要么在转换数据之前获取 hmac。