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

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

Войти
Регистрация
Восстановить пароль
 
Хард
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 49
#1

Русский Post запрос в базу через http - Android

27.04.2015, 17:57. Просмотров 589. Ответов 11
Метки нет (Все метки)

Кто в курсе этого метода связи с БД на удаленном сервере, как через POST отправить переменные с русскими буквами? Английский воспринимает на ура, символы тоже, но как только дело доходит до Русского языка, программа просто не выполняет этот самый POST.
код соединения:
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
 public static String executePost(String targetURL, String urlParameters) {
        URL url;
        HttpURLConnection connection = null;
        try {
            //Create connection
            url = new URL(targetURL);
            connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
 
            connection.setRequestProperty("Content-Length", "" +
                    Integer.toString(urlParameters.getBytes().length));
 
 
            connection.setUseCaches (false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
 
            //Send request
            DataOutputStream wr = new DataOutputStream (
                    connection.getOutputStream ());
            wr.writeBytes (urlParameters);
            wr.flush ();
            wr.close ();
 
            //Get Response
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuffer response = new StringBuffer();
            while((line = rd.readLine()) != null) {
                response.append(line);
                response.append('\r');
            }
            rd.close();
            return response.toString();
 
        } catch (Exception e) {
 
            e.printStackTrace();
            return null;
 
        } finally {
 
            if(connection != null) {
                connection.disconnect();
            }
        }
    }
код передачи переменных:
Java
1
String result = executePost("http://тут адрес сайта", "name=Привет"....вот тут самое главное);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2015, 17:57     Русский Post запрос в базу через http
Посмотрите здесь:

Post запрос Android
Android post запрос
http Post Android
Android Android query и HTTP Post
Android Post запрос
Как выполнить http запрос? Android
Android Http запрос в локальной сети
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 254
28.04.2015, 09:21     Русский Post запрос в базу через http #2
кодировку файла самого кода поставь UTF-8. у тебя же жестко вшитый код, вот он и пытается отправить win-1251 кодировку туда, где ждут utf-8
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.04.2015, 21:27     Русский Post запрос в базу через http #3
Я конвертил русские символы на клиенте в UTF-8, так получается двойная кодировка. А на сервере, делал обратную процедуру уже средствами php. Есть код на VBA, думаю разберетесь. Писал я его с java примера.
Кликните здесь для просмотра всего текста
Visual Basic
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
71
72
73
'************************************************************************************
'********Набор функций для кодирования русских символов для передачи в скрипт php****
'************************************************************************************
Public Function URLEncode(url As String) As String
    URLEncode = URLEncodeByUTF8(EncodeUTF8(url))
End Function
 
Public Function URLEncodeByUTF8(sRawURL As String) As String
On Error GoTo Catch
Dim iLoop As Integer
Dim sRtn As String
Dim sTmp As String
Const sValidChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:/.?=_-$(){}~&"
 
    If Len(sRawURL) > 0 Then
        For iLoop = 1 To Len(sRawURL)
            sTmp = Mid(sRawURL, iLoop, 1)
            If InStr(1, sValidChars, sTmp, vbBinaryCompare) = 0 Then
                ' If not ValidChar, convert to HEX and prefix with %
                sTmp = Hex(Asc(sTmp))
                If sTmp = "20" Then
                    sTmp = "+"
                ElseIf Len(sTmp) = 1 Then
                    sTmp = "%0" & sTmp
                Else
                    sTmp = "%" & sTmp
                End If
            End If
            sRtn = sRtn & sTmp
        Next iLoop
        URLEncodeByUTF8 = sRtn
     End If
Finally:
     Exit Function
Catch:
     URLEncodeByUTF8 = ""
     Resume Finally
End Function
 
Function ToLong(intVal) As Long
    If intVal < 0 Then
        ToLong = CLng(intVal) + &H10000
    Else
        ToLong = CLng(intVal)
    End If
End Function
 
'кодируем символы в UTF-8
Function EncodeUTF8(s$) As String
Dim i, c, utfc, b1, b2, b3
    For i = 1 To Len(s)
        c = ToLong(AscW(Mid(s, i, 1)))
 
        If c < 128 Then
            utfc = Chr(c)
        ElseIf c < 2048 Then
            b1 = c Mod &H40
            b2 = (c - b1) / &H40
            utfc = Chr(&HC0 + b2) & Chr(&H80 + b1)
        ElseIf c < 65536 And (c < 55296 Or c > 57343) Then
            b1 = c Mod &H40
            b2 = ((c - b1) / &H40) Mod &H40
            b3 = (c - b1 - (&H40 * b2)) / &H1000
            utfc = Chr(&HE0 + b3) & Chr(&H80 + b2) & Chr(&H80 + b1)
        Else
            utfc = Chr(&HEF) & Chr(&HBF) & Chr(&HBD) 'Младший или старший суррогат UTF-16
        End If
 
        EncodeUTF8 = EncodeUTF8 + utfc
    Next
End Function
'************************************************************************************
'************************************************************************************


В итоге строка вида:
HTML5
1
http://mysite.ru/scripts.php?name=Привет
Должна выглядеть так:
HTML5
1
http://mysite.ru/scripts.php?name=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
Добавлено через 9 минут
Ну а в самом php-скрипте используется функция urldecode
PHPHTML
1
echo urldecode('%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82');
Результатом будет: Привет
Хард
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 49
28.04.2015, 22:56  [ТС]     Русский Post запрос в базу через http #4
dubok79, если первый код это образец, то, я так понимаю, надо писать отдельную процедуру. А стандартные методы кодирования-декодирования есть???
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.04.2015, 22:58     Русский Post запрос в базу через http #5
Цитата Сообщение от Хард Посмотреть сообщение
надо писать отдельную процедуру
надо и не одну
Цитата Сообщение от Хард Посмотреть сообщение
А стандартные методы кодирования-декодирования есть???
Со стороны клиента вроде бы нет. Я уже не помню.
Хард
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 49
28.04.2015, 23:03  [ТС]     Русский Post запрос в базу через http #6
dubok79, хорошо, а если, допустим, запрос переводить в транслит, а на сервере обратно?
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.04.2015, 23:05     Русский Post запрос в базу через http #7
Тот же хрен только вид сбоку

Добавлено через 1 минуту
к тому же на php уже есть функция декодирования, а тут вам придется писать одно и тоже с двух сторон, да и наверное будут какие то косяки...навскидку не скажу
Хард
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 49
28.04.2015, 23:05  [ТС]     Русский Post запрос в базу через http #8
dubok79, вот же блин засада. Везет американцам, им ничего переводить не надо.
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.04.2015, 23:06     Русский Post запрос в базу через http #9
не вижу сложностей
Хард
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 49
28.04.2015, 23:15  [ТС]     Русский Post запрос в базу через http #10
dubok79, для меня сложность в том, чтобы разобраться с этим, а времени в обрез.
androbro
318 / 278 / 54
Регистрация: 17.10.2014
Сообщений: 825
29.04.2015, 08:55     Русский Post запрос в базу через http #11
Хард, не особо углубляясь:
а связка
Java
1
URLEncoder.encode()
на клиенте и php на сервере
PHP
1
urldecode()
разве не оно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2015, 09:22     Русский Post запрос в базу через http
Еще ссылки по теме:

HTTP запрос с интервалом Android
Android HTTP post android
Http запрос Android
Http POST запрос, как правильно написать Android
Android Запрос http + ProgressDialog

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

Или воспользуйтесь поиском по форуму:
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
29.04.2015, 09:22     Русский Post запрос в базу через http #12
И все же перед использованием почитайте про русские символы. Все таки URLEncoder не для них писан, а что бы экранировать спец символы. Например тут почитайте.
Yandex
Объявления
29.04.2015, 09:22     Русский Post запрос в базу через http
Ответ Создать тему
Опции темы

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