You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android与iOS中字符串转字节数组结果不一致的问题

问题:Android与iOS字符串转字节数组结果不一致,iOS输出不符合预期

我在Android和iOS平台分别实现字符串转字节数组功能,但结果存在差异,iOS输出未符合预期。以下是具体代码及输出:

Android 代码

String jsonString = "{\"i\":1,\"v\":1,\"t\":8,\"s\":\"dbri\",\"n\":50}";
    
byte[] payload = jsonString.getBytes(Charsets.UTF_8);

iOS 原代码

let jsonObject = ["i": 1, "v": 1, "t": 8, "s": "dbri", "n": 50] as [String : Any]

let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [])

let data =  Data(jsonData.bytes)

预期iOS输出字节数组

byte array = [123, 34, 118, 34, 58, 49, 44, 34, 110, 34, 58, 53, 48,
44, 34, 116, 34, 58, 56, 44, 34, 115, 34, 58, 34, 100, 98, 114, 105,
34, 44, 34, 105, 34, 58, 49, 125]

Android实际输出字节数组

[123, 34, 105, 34, 58, 49, 44, 34, 118, 34, 58, 49, 44, 34, 116, 34, 58, 56, 44, 34, 115, 34, 58, 34, 100, 98, 114, 105, 34, 44, 34, 110, 34, 58, 53, 48, 125]


解决方案

差异的核心原因:

  • Android代码直接使用固定JSON字符串转UTF-8字节数组,键的顺序完全由字符串定义;
  • iOS原代码通过字典序列化生成JSON,但Swift的Dictionary是无序集合,JSONSerialization输出的键顺序无法保证和预期一致,因此字节数组自然不同。

要让iOS输出符合预期,直接复用和Android相同的JSON字符串转UTF-8 Data即可,无需通过字典序列化:

let jsonString = "{\"i\":1,\"v\":1,\"t\":8,\"s\":\"dbri\",\"n\":50}"
guard let data = jsonString.data(using: .utf8) else {
    // 处理转换失败的情况
    return
}
// data即为与预期一致的字节数组

这样生成的data字节序列会和Android端完全匹配,因为两者使用了完全相同的源字符串和UTF-8编码规则。

内容的提问来源于stack exchange,提问作者Hayjyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:45:24