Я реализовал приложение на каком-то устройстве, которое занималось отправкой данных с сервера. Данные с сервера обычно бывают в форме:
"1;username;someInteger;"
Анализ был простым, и я использовал strtok
как вы можете себе представить, чтобы получить отдельные значения из этой строки, такие как: 1
, username
и someInteger
.
Но теперь может возникнуть ситуация, когда сервер отправит мне строку unicode в качестве username
.
Я думаю, хорошая идея - использовать имя пользователя, закодированное как строка UTF-8 (правильно?). Что вы рекомендуете - как следует разбирать его из строки? Какой символ использовать как разделитель, например (например, вместо ";") или какие функции использовать для извлечения имени username
из строки выше?
поскольку это какое-то встроенное устройство, я хочу избежать установки там некоторых сторонних библиотек (что может быть даже невозможно), поэтому более "чистые" способы были бы более желательными.
Персонаж ';'
то же самое в UTF-8, как и в ASCII, поскольку 127 первых символов в обоих кодировках одинаковы. Это означает, что вы все еще можете использовать strtok
для разделения на ';'
,
Сама вещь с UTF8 заключается в том, что вам практически ничего не нужно делать. Символы ASCII по-прежнему кодируются как те же ASCII-байты, что и всегда, поэтому, если вы просто продолжаете использовать разделители с запятой, вам вообще не нужно ничего делать.
strtok
. Это не потокобезопасно. Вместо этого используйтеboost::split
.boost
для простой заменыstrtok()
. Это слишком большое. Используйтеstrtok_r()
.