CBP 外设名称。编码问题
Posted
技术标签:
【中文标题】CBP 外设名称。编码问题【英文标题】:CBPeripheral name. Encoding issue 【发布时间】:2014-02-02 12:25:34 【问题描述】:我希望更改的是显示在 ios 蓝牙设置和我的应用程序中的外围设备名称,以便用户可以识别设备。
我做的是:
-
用户在 UITextField 中写了一个名字,我得到了 NSString。
我将 NSString 转换为 NSData。
使用新的外围设备名称写入特征。
外设更改 GATT 设备名称。
如果我使用 UTF8 编码来获取 NSData,一切都可以正常工作,但在波浪线、书面重音和西里尔字母方面存在问题,因为应用程序支持多种语言。不确定问题出在 iOS 设备还是外围设备上。
我的问题:
-
我应该使用什么编码?
是否可以使用此字符作为名称?
调用 peripheral.name 时返回的字符串使用什么编码?
是否有另一种解决方案来更改显示的外围设备名称?
【问题讨论】:
您在外设中使用什么堆栈?它支持任意名称吗?规范声明该名称是 utf8s,因此理论上它应该接受任何合法字符串。 “有问题……”是什么意思?您是否尝试过嗅探 BLE 包以查看外围设备是否传输您设置的名称? @allprog。感谢您的回复。我没有找到 name 属性的编码。你是对的,它是 UTF8。我的问题是我没有意识到某些字符需要 2 个字节。所以问题与长度有关。 太棒了!我添加了一个答案以供将来参考。您可以接受它或发布您自己的并接受它。我认为在任何情况下都不要让这个问题悬而未决,并向未来的用户表明您找到了解决方案,这一点非常重要。 【参考方案1】:名称以符合规范的 UTF-8 编码。 UTF-8 is a multibyte coding,因此将字节值解释为单独的字符可能会导致意外结果。
【讨论】:
以上是关于CBP 外设名称。编码问题的主要内容,如果未能解决你的问题,请参考以下文章