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

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

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

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

28.09.2015, 13:22. Просмотров 327. Ответов 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 Передать через Intent информацию об Item
Передать через intent VIEW Android
Android Как передать картинку через интент
Android Пытаюсь передать данные через Intent, но выходит ошибка
Android Как передать ссылку через Intent
Как передать через intent нажатие кнопки в другом активити Android
Android Передать ссылку на класс через Intent
Android Приложение перестало распознавать кириллицу
Android Мобильное приложение не распознает кириллицу
Передать файл через socket или через ftp api Android
Android Передать через intent ArrayList объектов своего класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
28.09.2015, 13:28     Как правильно передать кириллицу через сокеты? #2
Цитата Сообщение от yura91 Посмотреть сообщение
new OutputStreamWriter(socket.getOutputStream())
Java
1
new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,201
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
 Аватар для YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
28.09.2015, 14:25     Как правильно передать кириллицу через сокеты? #4
Цитата Сообщение от yura91 Посмотреть сообщение
сервере тоже надо изменить кодировку??
Обязательно
Yandex
Объявления
28.09.2015, 14:25     Как правильно передать кириллицу через сокеты?
Ответ Создать тему
Опции темы

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