我想使用WebSocket传输二进制数据,但是WebSocket仅支持传输UTF-8字符串。
使用base64进行编码是一种选择,但我的理解是,当您的文本可能从一种格式转换为另一种格式时,base64是最理想的选择。在这种情况下,我知道数据将始终为UTF-8,因此是否有更好的方法在UTF-8字符串中编码二进制数据而不付出base64 33%的大小溢价?
这个问题主要是学术性质的,因为WebSocket很可能会最终添加对二进制数据的支持,并且在此期间,base64是一个完美的替代方案。
我想使用WebSocket传输二进制数据,但是WebSocket仅支持传输UTF-8字符串。
使用base64进行编码是一种选择,但我的理解是,当您的文本可能从一种格式转换为另一种格式时,base64是最理想的选择。在这种情况下,我知道数据将始终为UTF-8,因此是否有更好的方法在UTF-8字符串中编码二进制数据而不付出base64 33%的大小溢价?
这个问题主要是学术性质的,因为WebSocket很可能会最终添加对二进制数据的支持,并且在此期间,base64是一个完美的替代方案。
0xxxxxxx
这会导致一种编码方式,即使用8个输出字节对7个输入字节进行编码:
input: aaaaaaaa bbbbbbbb cccccccc dddddddd eeeeeeee ffffffff gggggggg
output: 0aaaaaaa 0abbbbbb 0bbccccc 0cccdddd 0ddddeee 0eeeeeff 0ffffffg 0ggggggg
因此,输出与输入的比率为8/7。
当字符串不支持二进制 Blob 且文本编码可能会发生更改时,Base64 最好使用。通常在所有字符集中都可以安全使用 Base64 中使用的字符(已经存在很长时间)。
如果您知道它始终是 UTF8,请以一种利用许多数千个 UTF8 字符的方式对其进行编码?