http://bjoern.hoehrmann.de/utf-8/decoder/dfa/

у пользовательский кроссплатформенный минималистичный TCP-сервер на простом C89. (Но я также приму специфичный для POSIX ответ.)

Сервер работает со строками UTF-8, но никогда не заглядывает внутрь них. Он обрабатывает все строки как неизменяемые двоичные объекты.

Но теперь мне нужно принять строки UTF-8 от клиента, который не знает, как рассчитать их размер в байтах. Клиент может передавать только длину строки в символах.(Обновление: клиент в JavaScript, и «длина в символах», по сути,String.length() возвращается. Я предполагаю, что это действительно символы UTF-8, а не что-то еще.)

Я не хочу добавлять тяжелые зависимости на мой крошечный сервер. Есть ли надежный и аккуратный способ прочитать эту дейтаграмму? (Ради этого вопроса, скажем, что это читается изFILE *.)

U<CRLF>       ; data type marker (actually read by dispatching code)
<SIZE><CRLF>  ; UTF-8 string size in characters
<DATA><CRLF>  ; data blob

Пример:

U
7
Юникод!

Обновить:

Одна партия данных может содержать более одной дейтаграммы, поэтому приблизительное чтение не будет работать, мне нужно прочитать точное количество символов.

И фактические данные UTF-8 могут содержать любые символы, поэтому я не могу выбрать символ в качестве терминатора - я не хочу путаться с его экранированием в данных.

Ответы на вопрос(6)

Ваш ответ на вопрос