Цель передать русскую строку по сети. Когда отправляю из строки через toUtf8 получаю массив байт и к нему добавляю шапку свою. Когда принимаю то убираю шапку и через fromUtf8 получаю строку.
Для наглядности приведу выдержки из кода.
В main.cpp:
C++ (Qt)
...
QTextCodec::setCodecForTr( QTextCodec::codecForName( "Windows-1251"));
...
На стороне отправителя:
C++ (Qt)
sendString( QString message){
messageHeader header;
...
QByteArray resMessage = message.toUtf8();
resMessage.prepend( (const char *)&header, sizeof( messageHeader));
p_udpSocket->writeDatagram( resMessage.data(), resMessage.size(), p_remoteIp, p_remotePort);
}
при отправке пишу sendStr( tr( "Привет!")). Функции эти являются методами обьектов ( наследники QObject).
На стороне получателя:
C++ (Qt)
QString getStr(){
QByteArray message;
message.resize( p_udpSocket->pendingDatagramSize());
p_udpSocket->readDatagram( message.data(), message.size());
...
message = QByteArray( &(message.data()[sizeof( messageHeader)]), message.size() - sizeof( messageHeader));
return QString::fromUtf8 ( message.data(), message.size());
Это не реальный код, так что об оптимальности вопроса не стоит. Подобное в линуксе замечательно работает. А в винде в начале строки добавляются какие-то иероглифы( в 7-ке что-то типа перевернутой буквы "г" а в ХР четыре квадрата), но сама строка присутствует целиком.
Я, если честно, даже куда искать уже не совсем понимаю... Расскажите что не так)