-
Использую сокеты для протокола SNPP. Русские символы должны передаваться в KOI8-R. Перекодирую следущим образом - string Resultat; Encoding koi8r = Encoding.GetEncoding("koi8-r"); byte[] srcBytes = koi8r.GetBytes(message); byte[] dstBytes = Encoding.Convert(Encoding.GetEncoding("windows-1251"), koi8r, srcBytes); Resultat = koi8r.GetString(dstBytes); if (message.Length < 69) { sResp = oClient.Send("MESS " + Resultat); } Перекодировка проходит нормально сообщение сервером принимается, но смс-ки мну приходят не в том виде, ((, может по пути еще как то перекодировка происходит... я хз... До этого аналогичный протокол делал в Delphi , мне приходит нормальная смс, для SNPP я так же использовал сокеты. Подскажите, плз, я знаю что здесь быстро всегда отвечают и помогают:)
-
message - это я так понимаю String. Зачем двойная перекодировка? Даже я сказал бы тройная. В итоге ты получаешь юникод строку опять в Resultat. Распиши после каждой строки что у тебя получается, будет видно, что массив байт в koi8r ты получил уже в byte[] srcBytes = koi8r.GetBytes(message); Все остальное непонятно зачем??
-
В общем дело в чем было: При объявлении StreamWriter sr=new StreamWriter(oTcpClient()); по умолчанию в .NET идет кодировка utf-16 (хоть в какую кодировку ни преобразуй), у StreamWriter есть свойство Encoding которое можно изменить при объявлении sr: StreamWriter sr=StreamWriter(oTcpClient(), System.Text.Encoding.GetEncoder(20866)); где 20866 - код KOI8-R в таблице кодов (приведена в MSDN). Спасибо, что откликнулся Evgeny V © ;).
|