Как определить, какой кодер использовать с входящими нелатинскими данными сокетов - PullRequest
0 голосов
/ 25 августа 2011

У меня есть слушатель сокета в C # .NET, который слушает соединения. Соединения в основном с русских или китайских клиентов, которые могут отправлять на сервер данные с нелатинскими символами. Как правильно определить кодировщик для сокета входящих данных. Я использовал этот код, но с другими данными, кроме латинских символов, кажется, возвращает только ????? символы.

            byte [] buffer = new byte[1024];
            int iRx = m_socWorker.Receive (buffer);
            char[] chars = new char[iRx];

            System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
            int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
            System.String szData = new System.String(chars);
            txtDataRx.Text = szData;

1 Ответ

1 голос
/ 25 августа 2011

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

Ваш код в настоящее время использует UTF8 для декодирования данных - UTF8 способен хранить русские и китайские символы, но вы должны убедиться, что клиенты кодируют также и свои данные как UTF8.

Кроме того, для отображения этих символов необходимо иметь шрифт, который поддерживает языки (русский довольно распространен, поскольку содержит фиксированное количество символов в алфавите, в то время как на китайском языке существуют тысячи различных «букв»).и вам может понадобиться скачать шрифт, чтобы они появлялись на вашем экране).Обычно, хотя неподдерживаемые символы отображаются в виде пустых квадратов, в то время как знаки вопроса генерируются, когда используются символы, которые не поддерживаются кодировкой.

Джоэл создал статью с дополнительной (основной) информациейо кодировке, которую вы можете прочитать.

...