为什么有些二进制文件在存储字符串时字符之间有空字节?

Bri*_*ica 1 binaryfiles utf-8 character-encoding

当我过去经常处理 .CON 文件(游戏将在 Xbox 360 上使用的本机文件格式)时,我记得在使用十六进制编辑器查看这些文件时看到这些文件中的文本由空字节分隔。

今天我还注意到,在使用 SQLite 浏览器查看来自 Chrome 的本地存储文件时;存储为二进制/blob 值的所有文本字段,如下所示:

22007700730073003a002f002f006700
6100740065007700610079002e006400
6900730063006f00720064002e006700
67002200
Run Code Online (Sandbox Code Playgroud)

空字节是怎么回事?这是不同类型的字符编码吗?我认为它不可能是 utf8,因为 utf8 不会使用两个字节来编码 ascii 范围内的字符,但也许我错了?

Jos*_*Lee 5

这是 UTF-16 的"wss://gateway.discord.gg". (如果您看到交替的 ASCII 字节和空字节,您可以打赌它是 UTF-16。)

由于 JavaScript 字符串是 UTF-16,并且 SQLite 支持以 UTF-16 存储文本,因此 Chrome 会使用它来实现本地存储也就不足为奇了。

  • 如果它被存储为 BLOB,则它不受数据库编码的影响。 (2认同)