Простенький асинхронный чат. Что-то не то с кодировкой - C#
Формулировка задачи:
Нашел пример простого чата. В комплект поставки входит серверная чать и клиентская (исходник в аттаче).
Запустил, вроде все работает. При дальнейшем тестировании оказалось что если ввести логин кирилицей или просто отправлять сообщения кирилицей начинаются чудеса: тект обрезается и появляются какие-то артефакты.
Немного поэкспериментировав пришел к мысли что текст рубится каждый раз когда преобразуется из байтов в строки. Причем рубится на стороне сервера а затем и на стороне клиента когда приходит ответ от сервера.
Думаю за все эти беды отвечает следующий кусок кода:
Но что конкретно здесь не так, разобраться не могу. Помогите пожалуйста пофиксить баг...
public Data(byte[] data)
{
//The first four bytes are for the Command
this.cmdCommand = (Command)BitConverter.ToInt32(data, 0);
//The next four store the length of the name
int nameLen = BitConverter.ToInt32(data, 4);
//The next four store the length of the message
int msgLen = BitConverter.ToInt32(data, 8);
//This check makes sure that strName has been passed in the array of bytes
if (nameLen > 0)
this.strName = Encoding.UTF8.GetString(data, 12, nameLen);
else
this.strName = null;
//This checks for a null message field
if (msgLen > 0)
this.strMessage = Encoding.UTF8.GetString(data, 12 + nameLen, msgLen);
else
this.strMessage = null;
}Решение задачи: «Простенький асинхронный чат. Что-то не то с кодировкой»
textual
Листинг программы
strMessage ?? ""