为何Xbox360 .CON文件与Chrome SQLite存储中字符串含空字节?
字符间空字节的真相:UTF-16LE编码
这其实是**UTF-16LE(小端序UTF-16)**编码的典型表现,我给你一步步拆解清楚:
先解码你的示例
你给出的十六进制串:
22007700730073003a002f002f0067006100740065007700610079002e0064006900730063006f00720064002e00670067002200
按照UTF-16LE规则解码后,会得到完全正常的字符串:"wss://gateway.discord.gg"——是不是一下子就对应上了?
为什么会出现空字节
UTF-16是一种双字节编码方案,设计目的是覆盖全球几乎所有字符(包括中文、emoji、特殊符号等)。它的核心特点是:
- 普通ASCII字符(0x00-0x7F范围内的字节,比如英文字母、基础符号)在UTF-16LE中会被存储为「原ASCII字节 + 0x00字节」。
- 这里的「LE」是Little-Endian(小端序)的缩写,意思是存储字节时低字节在前、高字节在后。因为ASCII字符的高字节本身就是0,所以就出现了你看到的“每个有效字符后面跟着一个空字节”的现象。
为什么不同场景都会遇到
- Xbox 360的.CON文件:微软整个生态(从Windows到Xbox)长期默认用UTF-16作为多语言文本的标准编码,原生游戏文件采用它可以轻松支持多语言本地化,避免早期单字节编码只能覆盖少量字符的问题。
- Chrome localStorage的Blob字段:部分前端应用会选择把字符串以UTF-16格式写入Blob存储,可能是为了兼容特定字符集需求,或是某些框架/扩展的默认存储逻辑。当你用SQLite浏览器查看Blob类型字段时,看到的是原始二进制数据,自然就会显现出这些空字节。
验证小技巧
你可以用任意十六进制编辑器的编码转换功能,选择「UTF-16LE」解码这段字节,就能直接看到正常的文本内容,快速验证这个结论。
内容的提问来源于stack exchange,提问作者Brian Leishman
相关产品推荐
相关产品推荐

