Прежде всего: JSON и XML не являются опцией в данном конкретном случае, пожалуйста, не предлагайте их. Если это облегчает принятие этого факта, представьте, что я намерен заново изобрести колесо для самообразования.
Вернуться к сути:
Мне нужно разработать бинарно-безопасный формат данных для кодирования некоторых дейтаграмм, которые я отправляю на определенный тупой сервер, который я пишу (в C, если это имеет значение).
Чтобы упростить вопрос, допустим, что я отправляю только цифры, строки и массивы.
Важный факт: Сервер ничего не знает (и не должен знать) о Юникоде и прочем. Он обрабатывает все строки как двоичные объекты (и никогда не заглядывает внутрь них).
Формат, который я первоначально разработал, выглядит следующим образом:
- датаграмма:
<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>
* +1034 * Пример: * * одна тысяча тридцать пять
[ 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
Проблема в том, что я не могу надежно получить размер строки в байтах в JavaScript.
Итак, вопрос в том, как изменить формат, чтобы строка могла быть сохранена как в JS, так и аккуратно загружена в C.
Я не хочу добавлять поддержку Unicode на сервер.
И я не очень хочу декодировать строки на сервере (скажем, из base64 или просто в unescape \ xNN последовательности) - это потребует работы с динамическими строковыми буферами, что, учитывая, насколько тупой сервер, не очень желательно ...
Есть какие-нибудь подсказки?