JavaScript友好的二进制安全数据格式设计(不是JSON或XML)

时间:2011-04-01 17:52:36

标签: javascript c serialization data-formats

首先:在这种特定情况下,JSON和XML不是一个选项,请不要提出建议。如果这样可以更容易接受这一事实,那么想象一下我打算重新发明轮子进行自我教育。

回到这一点:

我需要设计一个二进制安全数据格式来编码我发送给我写的特定哑服务器的一些数据报(如果重要的话,用C语言)。

为简化问题,我们假设我只发送数字,字符串和数组。

重要事实:服务器不会(也不应该)知道有关Unicode和内容的任何信息。它将所有字符串视为二进制blob(并且从不在其中查找)。

我最初设计的格式如下:

  • 数据报:<Number:size>\n<Value1>...<ValueN>
  • 值:
    • 号码:N\n<Value>\n
    • 字符串:S\n<Number:size-in-bytes>\n<bytes>\n
    • 数组:A\n<Number:size>\n<Value0>...<ValueN>

示例:

[ 1, "foo", [] ]

序列化如下:

1   ; number of items in datagram
A   ; -- array --
3   ; number of items in array
N   ; -- number --
1   ; number value
S   ; -- string --
3   ; string size in bytes
foo ; string bytes
A   ; -- array --
0   ; number of items in array

问题是我can not可靠地在JavaScript中获得字符串大小的字符串。

所以,问题是:如何更改格式,因此字符串既可以保存在JS中,也可以整齐地加载到C中。

我不想为服务器添加Unicode支持。

我不太想解码服务器上的字符串(例如,从base64或简单地转换为unescape \ xNN序列) - 这需要使用动态字符串缓冲区,考虑到服务器是多么愚蠢,这是不太理想的...

任何线索?

1 个答案:

答案 0 :(得分:1)

看来普通C中读UTF-8毕竟是not that scary。所以我正在扩展协议以原生处理UTF-8字符串。 (但是会对这个问题的回答表示赞赏。)