C ++: преобразовать вектор <char>в строку UTF-8, чтобы можно было отправлять через веб-сокет - PullRequest
0 голосов
/ 14 декабря 2018

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

    std::vector<char> data;

    // Fill data ..., then 

    std::string utfData(data.begin(), data.end());

    // Finally, send utfData

Однако на стороне браузера я говорю, что мои данные не являются должным образом закодированной строкой UTF-8.Что не так с моей логикой, и как мне преобразовать эту vector<char> в строку UTF8?

Если приведенная выше логика кажется правильной, тогда мне придется исследовать другой код, но я сомневаюсь, что проблема заключается в этом, поскольку я использовал сервер c ++ и клиент javascript для отправки обычных объектов std :: string до того, какбез проблем.Однако, на принимающей стороне, он даже не получит сообщение сейчас, потому что говорит, что это неверная строка UTF-8.То есть на уровне протокола WebSocket он отклоняет сообщение, которое публикует мой сервер.

1 Ответ

0 голосов
/ 14 декабря 2018

Ваша логика верна для копирования символов из вектора в строку.

Учитывая, что результатом должен быть UTF-8, если источником является UTF-8, то программа верна.

Если источником является не UTF-8, то вам необходимо каким-то образом преобразовать кодировку.Чтобы сохранить четкость текста при преобразовании, вам необходимо знать кодировку исходных данных и знать, как выполнить преобразование.

Если данные не текстовые, то есть двоичные, то вывероятно, можно использовать, например, кодировку Base64, чтобы сделать его действительным UTF-8.Конечно, вы можете использовать Base64 и с текстом, но текст не будет читаться до тех пор, пока он не будет декодирован, а затем будет отображен в конкретной кодировке, которую он использует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...