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
相关产品推荐
相关产品推荐

