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

Swift 5.0开发BLE App:如何将字符串转为EUC-KR编码bytearray?

解决Swift中EUC-KR编码与Android端不一致的问题

首先明确核心误解:Android端输出的是十六进制字节值,而iOS端输出的是十进制字节值,两者本质完全一致,仅显示格式不同。我们逐一验证对应关系:

字节值格式对应验证

对比两端输出:

  • Android前四位:32 30 32 32(十六进制)→ 转十进制为 50 48 50 50,与iOS前四位完全匹配
  • Android第7位:37(十六进制)→ 十进制是55,对应字符串中的'7',iOS输出中应为列表遗漏该位
  • 韩文部分:Android的c3 e6 ba cf(十六进制)→ 十进制是195 230 186 207,与iOS第9-12位完全一致
  • 后续c0 da(十六进制)→ 十进制192 218,也与iOS第15-16位匹配

所有字节值转换进制后完全对应,说明你的Swift转换代码是正确的。

确认Swift正确实现

你的代码1是标准的EUC-KR编码转换方式,完全合规:

let rawEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.EUC_KR.rawValue))
let encoding = String.Encoding(rawValue: rawEncoding)
let strEUCData = "20221127-충북80자9015-X-02-1212121.TXT".data(using: encoding) ?? Data()

若需要将iOS的十进制字节值转为十六进制输出(和Android格式对齐),可添加以下辅助代码:

let hexString = strEUCData.map { String(format: "%02x", $0) }.joined(separator: " ")
print(hexString)

运行后输出的十六进制字符串会与Android端的字节序列完全一致。

额外说明

代码2中直接使用0x80000940是CFStringEncodings.EUC_KR.rawValue的数值,本质与代码1等价,但写法不够直观,推荐使用代码1的标准写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:46