python-3.x - utf-16 编码字符串是否需要 [0xff, 0xfe] 前缀?
问题描述
改写问题!
我正在使用需要对字符串进行“unicode 编码”的供应商设备,其中每个字符都用两个字节表示。我的字符串将始终基于 ASCII,所以我认为这是将我的字符串转换为供应商字符串的方法:
>>> b1 = 'abc'.encode('utf-16')
但是检查结果,我看到字节数组上有一个前导 [0xff, 0xfe] :
>>> [hex(b) for b in b1]
['0xff', '0xfe', '0x61', '0x0', '0x62', '0x0', '0x63', '0x0']
由于供应商的设备不期望 [0xff, 0xfe],我可以将其删除...
>>> b2 = 'abc'.encode('utf-16')[2:]
>>> [hex(b) for b in b2]
['0x61', '0x0', '0x62', '0x0', '0x63', '0x0']
...这就是我想要的。
但真正让我感到惊讶的是,我可以解码 b1 和 b2 并且它们都重新组合为原始字符串:
>>> b1.decode('utf-16') == b2.decode('utf-16')
True
所以我的两个相互交织的问题:
- 编码字节头部的 0xff、0xfe 有什么意义?
- 像上面的 b2 一样,去掉 0xff, 0xfe 前缀有什么危险吗?
解决方案
推荐阅读
- r - 删除 R 中两个特定字母之前的所有前导字符串
- c# - ASP.NET - Path Traversel exploit when downloading a File
- r - Split string base on a list of words
- java - Does a class which is extending an abstract class still has to implement the interface that abstract class is implementing?: java
- mongodb - Can't get cyrus-sasl installed on RHEL7 VM
- amazon-web-services - Increasing worker_connections of nginx on Beanstalk nodejs environment
- django - 从序列化程序中的对象获取更多信息,而不仅仅是 id
- r - 为 hist() 创建自定义 x 轴标签
- c - win32 memory cache impliment when reallocate the memory size
- python - 我在 guizero 中的用户名和密码脚本有什么问题?