Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сокет-сервер не понимает входящий utf


Автор: Smorodin 28.11.2011, 07:29
Клиент (AS3) отправляет строку:
Код

sock.writeUTFBytes(str);


Сервер на JAVA читает:
Код

DataInputStream in = new DataInputStream(s.getInputStream()); // Socket s = sock.accept();
//.......
String quer = in.readLine();
System.out.println("query is "+quer);


В консоли:
Код

query is ......{"message":"ол��"....}}


Во флеш приходит УТФ, раньше сервер писался на Node.js - вообще никаких проблем с кодировкой не было.
Все файлы Java в утф. На Debian'е. Компилируется через консоль. Локаль, консоль, ссш-клиент - везде утф8.
Если в коде вписать русские буквы, но и в консоль нормально уходит, и клиенту нормально отправляется. Получается, проблема именно в получении строки... (?)

Автор: LSD 28.11.2011, 10:46
Вместо readLine() надо использовать readUTF().

P.S. Да и вообще если компилятор на что-то ругается, то стоит обратить самое пристальное внимание на это.

Автор: Smorodin 28.11.2011, 10:58
Спасибо за ответ. 

Но компилятор вообще ни на что не ругается. =(

Но вот при использовании readUTF() начинает говорить на ЕОФ.

Как бы сейчас правильно отправить с клиента , чтобы сервер прочитал без ошибок....

Автор: LSD 28.11.2011, 11:12
Цитата(Smorodin @  28.11.2011,  11:58 Найти цитируемый пост)
Но компилятор вообще ни на что не ругается. =(

readLine() - Deprecated компилятор должен выдавать warning.


Цитата(Smorodin @  28.11.2011,  11:58 Найти цитируемый пост)
Но вот при использовании readUTF() начинает говорить на ЕОФ.

Метод readUTF() вначале ожидает 2 байта с длинной строки, потом уже саму строку в UTF. Надо чтобы AS3 писал вначале длинну строки, а потом уже саму строку.

Автор: Smorodin 28.11.2011, 13:07
Спасибо!
Проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)