Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,248
#1

Как правильно передать кириллицу через сокеты? - Программирование Android

28.09.2015, 13:22. Просмотров 423. Ответов 3
Метки нет (Все метки)

У меня есть TCP клиент в телефоне и TCP сервер на ноуте. Когда я передаю английские сообщения(символы ASCII) все передается нормально. А когда передаю кириллицу(типа "привет") то на сервере в буфер попадают какие то неопознаваемые символы, передается некорректно. Подскажите пожалуйста как правильно передать кириллицу. Как включить соответствующую кодировку чтобы все передавалось нормально?? Код клиента я привел подскажите что в него добавить??

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
 
public class Client extends Activity {
 
    private Socket socket;
 
    private static final int SERVERPORT = 5050;
    private static final String SERVER_IP = "192.168.1.4";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        
        new Thread(new ClientThread()).start();
    }
    
    public void onClick(View view) {
        try {
            EditText et = (EditText) findViewById(R.id.EditText01);
            String str = et.getText().toString();
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())),
                    true);
            out.flush();
 
            out.println(str);
 
            out.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    class ClientThread implements Runnable {
 
        @Override
        public void run() {
            
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
                socket = new Socket(serverAddr, SERVERPORT);
 
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
 
        }
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2015, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно передать кириллицу через сокеты? (Программирование Android):

Как передать картинку через интент - Программирование Android
Как передать картинку которая есть в drawable через интент в другое активити?можете написать пример кода? Добавлено через 1 час 51...

Как передать ссылку через Intent - Программирование Android
Как можно в такой класс package app.kray.anddev; import java.io.IOException; import java.io.InputStream; import...

Как передать через intent нажатие кнопки в другом активити - Программирование Android
В первом активити у нас есть две кнопки 1 и 2. Во втором активити ещё две кнопки 3 и 4. Вопрос в том, как сделать так, чтоб при нажатии...

Передать файл через socket или через ftp api - Программирование Android
Посоветуйте как поступить: Есть файл на устройстве его нужно загрузить на сервер. 1 Загружать через socket, создав на сервере...

Как добавить кириллицу в cmd/adb shell/sqlite3 консоль? - Программирование Android
При выполнении запросов из ОС Windows 7 в cmd -> adb shell -> sqlite3 консоли кириллица из записей в табличках отображается некорректно....

Передать через intent VIEW - Программирование Android
Как можно через intent передать "VIEW", полученное вот таким способом: View view = (View)findViewById(R.id.layout_linear); Передавая...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
28.09.2015, 13:28 #2
Цитата Сообщение от yura91 Посмотреть сообщение
new OutputStreamWriter(socket.getOutputStream())
Java
1
new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,248
28.09.2015, 13:37  [ТС] #3
new OutputStreamWriter(socket.getOutputStream()) new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8")) заменил

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
 
public class Client extends Activity {
 
    private Socket socket;
 
    private static final int SERVERPORT = 5050;
    private static final String SERVER_IP = "192.168.1.4";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        
        new Thread(new ClientThread()).start();
    }
    
    public void onClick(View view) {
        try {
            EditText et = (EditText) findViewById(R.id.EditText01);
            String str = et.getText().toString();
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                    true);
            out.flush();
 
            out.println(str);
 
            out.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    class ClientThread implements Runnable {
 
        @Override
        public void run() {
            
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
                socket = new Socket(serverAddr, SERVERPORT);
 
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
 
        }
 
    }
}
и все равно английские слова которые передаешь отображаются на сервере нормально а русские опять непонятно?? что еще попробовать может на сервере тоже надо изменить кодировку??
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
28.09.2015, 14:25 #4
Цитата Сообщение от yura91 Посмотреть сообщение
сервере тоже надо изменить кодировку??
Обязательно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2015, 14:25
Привет! Вот еще темы с ответами:

Передать массив с текстом через интент - Программирование Android
Глазами прошелся по мануалу. Код, указанный ниже, кривой! Я предупредил Сам знаю, что есть грубые ошибки. Мне необходимо передать...

Передать через Intent информацию об Item - Программирование Android
Выводит ошибку и приложение закрывается by Force Close ошибка по ходу в Intente package kg.aykut.speak_kyrgyz; import...

Передать ссылку на класс через Intent - Программирование Android
Возможно ли подобное? Есть класс, в котором храню больше 50 параметров разного типа (количество переменных все еще растет). Эти...

Как передать через сокеты положение картинки на форме? - Delphi
мне нужно постоянно передавать положения перемещающейся по форме картинки (мячик). делаю так сервер: procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.09.2015, 14:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru