Задать вопрос
@fen1csw0w

Как установить общую кодировку в клиент-серверном приложении?

Пишу чат,сервер пишу на c++,клиентское приложение на c#,при отправки сообщения клиентом на русском языке,сервер пересылает это сообщение,но увы присылает белеберду(на англ. все хорошо). Как сервер должен отправлять сообщения в той же кодировке,как ее установить,т.к сбивается при получении сообщения.
  • Вопрос задан
  • 278 просмотров
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
@weblucker
Честно стырено на ОтветахМейл, может, поможет :)

UTF8 устроен так, что символы с кодами 0-127 (английские буквы, цифры, знаки препинания и т. д. ) занимают один байт, и поэтому отображаются верно, а символы национальных языков занимают два байта. Отсюда и абракадабра при отображении русского текста.
Вам же нужно перевести все в однобайтовую кодировку Win-1251. Это можно сделать в два шага:
- преобразовать то, что прислано, в юникод (например, с помощью функции WinAPI MultiByteToWideChar, указав UFT8 в качестве кодировки)
- преобразовать строку из юникода в нужную кодировку (например, используя функцию WideCharToMultiByte, указав число 1251 первым параметром функции)
Как вариант, можно воспользоваться функциями стандартной библиотеки C.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Demanoidos
@Demanoidos
безнравственный извращенец с богатой фантазией
Вы должны работать с UNICODE, UTF8. Не нужно связываться ни с какими другими кодировками.

Всё зависит от того, как именно вы передаёте эти данные по сети. По сети передаются байты, вы должны уметь правильно их интерпретировать. Примеры:

1. Простые текстовые строки, окончание CRLF. Нужно кодировать ваш UTF через base64.
2. JSON объекты. Национальные символы автоматически кодируются esc-последовательностями, это "утолщает" протокол, но с ним легче работать и его легче расширять. Окончание строк CRLF. Тот же CRLF внутри JSON тоже кодируется esc-последовательностями, косяков не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы