Кодировка символов - PullRequest
9 голосов
/ 17 мая 2011

Для этого куска кода:

String content = String.Empty;
ListenerStateObject state = (ListenerStateObject)ar.AsyncState;
Socket handler = state.workSocket;

int bytesRead = handler.EndReceive(ar);

if (bytesRead > 0)
{
   state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));

   content = state.sb.ToString();
   ...

Я получаю "Ол?" вместо «Ола»

Что с ним не так?

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Скорее всего, это неправильная кодировка.

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

Простой случай: граница 2 блоков прорезает многобайтовый кодированный символ.

Лучшее решение: присоедините TextReader к вашему потоку.

1 голос
/ 17 мая 2011

Вы уверены, что поток фактически закодирован в utf-8?Попробуйте проверить необработанные байты в буфере перед кодированием (их должно быть 4) и посмотрите, каковы действительные значения байтов.

0 голосов
/ 17 мая 2011

Вы выводите результат в нечто, понимающее «сложное» кодирование?

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