Конференция ".Net" » Работа с сокетами в C#. Кодировка.
 
  • Ypbi4 © (29.01.08 13:19) [0]
    Использую сокеты для протокола 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 я так же использовал сокеты. Подскажите, плз, я знаю что здесь быстро всегда отвечают и помогают:)
  • Evgeny V © (29.01.08 14:57) [1]
    message - это я так понимаю String. Зачем двойная перекодировка? Даже я сказал бы тройная. В итоге ты получаешь юникод строку опять в Resultat.  Распиши после каждой строки что у тебя получается, будет видно, что массив байт в koi8r ты получил уже в
    byte[] srcBytes = koi8r.GetBytes(message);

    Все остальное непонятно зачем??
  • Ypbi4 © (29.01.08 17:07) [2]
    В общем дело в чем было:
    При объявлении
    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 ©  ;).
 
Конференция ".Net" » Работа с сокетами в C#. Кодировка.
Есть новые Нет новых   [118682   +10][b:0][p:0.001]