以UTF-8字符串存储二进制数据

Tmd*_*ean 21 javascript unicode utf-8 websocket

我想使用WebSocket传输二进制数据,但您只能使用WebSockets传输UTF-8字符串.

使用base64对其进行编码是一种选择,但我的理解是,当您的文本可能从一种格式转换为另一种格式时,最理想的是base64.在这种情况下,我知道数据将始终是UTF-8,那么有没有更好的方法来编码UTF-8字符串中的二进制数据而不支付base64的33%大小溢价?

这个问题主要是学术,为二进制的支持可能会被添加到最终的WebSocket和Base64是在此期间完全cromulent替代.

Gum*_*mbo 13

您可以使用Base-128编码而不是Base-64编码.这只会导致与1/3相反的1/7的开销.

我们的想法是使用所有Unicode代码点,这些代码点可以用UTF-8(0-127)中的单个字节表示.这意味着所有字节都以a开头,0因此数据还剩下7位:

0?xxxxxxx
Run Code Online (Sandbox Code Playgroud)

这导致编码使用8个输出字节编码7个输入字节:

input:  aaaaaaaa bbbbbbbb cccccccc dddddddd eeeeeeee ffffffff gggggggg
output: 0aaaaaaa 0abbbbbb 0bbccccc 0cccdddd 0ddddeee 0eeeeeff 0ffffffg 0ggggggg
Run Code Online (Sandbox Code Playgroud)

因此输出输入比为8/7.