代码之家  ›  专栏  ›  技术社区  ›  Brian Leishman

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

  •  1
  • Brian Leishman  · 技术社区  · 6 年前

    那是我过去经常胡闹的时候。CON文件(游戏在Xbox 360上使用的本机文件格式)我记得在使用十六进制编辑器查看这些文件时,我看到这些文件中的文本以空字节分隔。

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

    22007700730073003a002f002f006700
    6100740065007700610079002e006400
    6900730063006f00720064002e006700
    67002200
    

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

    2 回复  |  直到 6 年前
        1
  •  5
  •   Josh Lee ZZ Coder    6 年前

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

    由于JavaScript字符串是UTF-16,SQLite支持在UTF-16中存储文本,所以Chrome将使用它来实现localstorage也就不足为奇了。

        2
  •  2
  •   retupmoca    6 年前

    这可能是UTF-16编码,它使用两个字节存储ASCII字符,是大多数windows函数调用的首选unicode编码。