好久没更新博客了。
最近忙着一个项目, 还要应付各种考试就顾不上博客了。
今天遇到了一个蛋疼的问题, 通过BLE4.0与蓝牙外设通信。
依照客户给的协议文档发送的数据, 但是外设不能正确识别。折腾了一下午。
最后问了客户才知道... 数据头fffe, 他们在外设里面已经做规定了。 所以不需要发送。
真是蛋疼。也怪自己不懂Unicode编码相关。
Mark一下。
Unicode与FFFE
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。