forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JAVA Micro Edition (http://forum.boolean.name/forumdisplay.php?f=52)
-   -   Кодивка мидлета и связь через интернет. (http://forum.boolean.name/showthread.php?t=12176)

IvanSCM 12.03.2010 22:50

Кодивка мидлета и связь через интернет.
 
Значит читал я читал и начитал что J2ME работает с UTF-8 мол родная кодировка. Но интересно следующее: внутри мидлета юникод, однозначно, конект идет с сервером, сервер отдает в UTF-8, а в итоге "кракозябры".

кароче узнал что ко мне на сервак строка "Привет" приходит как Привет. Узнал кодировку это CP1252. Но с мидлета я посылаю явно ЮТФ8. Неразбириха. Даже если обратно послать этот текст на телефон приходит Привет. *ломаю голову*

odd 24.03.2010 02:46

Ответ: Кодивка мидлета и связь через интернет.
 
Да, в Java ME очень оригинально сделаны операции чтения/отправки потоков данных.
Забавно, что кодировки меняются автоматически, а вот вручную переделать строку из одной кодировки в другую так это фигушки.

Жека 24.03.2010 06:51

Ответ: Кодивка мидлета и связь через интернет.
 
Если не нужна полная поддержка всех символов, а только русские в нормальный вид привести (цифры, символы и английские должны быть нормальные, совпадают с ASCII), то можно просто перевести коды русских букв в ASCII, а прочие не трогать.

Вот простая штука:
Код:

public static String fnSimpleUTFToAscii(String text)
{
    String str = "";
    int count = text.length();
    char smb;
    for(int k=0;k<count;++k)
    {
        smb = text.charAt(k);
        if(smb >= 1040 && smb <= 1103) //русские переводим в ascii-код
            str += String.valueOf(smb - 1040 + 192);
        else if(smb == 1025) //Ё
            str += String.valueOf(168);
        else if(smb == 1105) //ё
            str += String.valueOf(184);
        else //прочие символы оставляем прежними
            str += String.valueOf(smb);           
    }
    return str;
}

Кстати, в джаве используется BigEndianStream.

IvanSCM 28.03.2010 14:07

Ответ: Кодивка мидлета и связь через интернет.
 
Жека, это мне для отправки использовать?

Жека 29.03.2010 14:03

Ответ: Кодивка мидлета и связь через интернет.
 
Перед отправкой строк на сервер прогоняешь их через эту функцию.
Код:

text = fnSimpleUTFToAscii(String text);
А при получении строк от сервера делаешь обратную штуку, т.е. из Ascii переводишь в UTF.
Код:

text = fnSimpleAsciiToUTF(String text);
Код функции может быть таким:
Код:

public static String fnSimpleAsciiToUTF(String text)
{
    String str = "";
    int count = text.length();
    char smb;
    for(int k=0;k<count;++k)
    {
        smb = text.charAt(k);
        if(smb >= 192 && smb <= 255)
            str += String.valueOf(smb - 192 + 1040);
        else if(smb == 168) //Ё
            str += String.valueOf(1025);
        else if(smb == 184) //ё
            str += String.valueOf(1105);
        else
            str += String.valueOf(smb);
    }
    return str;
}



Часовой пояс GMT +4, время: 22:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot