Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> toLowerCase для кириллицы в мидлете, Не приводится к нижнему регистру 
V
    Опции темы
FiMa1
  Дата 23.3.2011, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Ребята, привет всем!

Подскажите, если кто-нибудь сталкивался с подобной проблемой. Не приводятся к нижнему регистру слова, написанные на кириллице.

Код

import javax.microedition.midlet.*;

public class TestMidlet extends MIDlet {
    public TestMidlet() {        
        if ("Привет".equalsIgnoreCase("привет")) {
            System.out.println("Equals!");
        } else {
            System.out.println("Not equals!");
        }

        System.out.println("=== Upper case ===");
        for (int i = 0; i < "Привет".length(); i++) {
            System.out.println("0x" + (int) "Привет".charAt(i) + " ");
        }
        System.out.println("=== toLowerCase ===");
        for (int i = 0; i < "Привет".length(); i++) {
            System.out.println("0x" + (int) "Привет".toLowerCase().charAt(i) + " ");
        }
        System.out.println("=== Lower case ===");
        for (int i = 0; i < "привет".length(); i++) {
            System.out.println("0x" + (int) "привет".charAt(i) + " ");
        }
    }

    protected void startApp() {
    }

    protected void pauseApp() {
    }

    protected void destroyApp(boolean bool) {
    }
}

Вывод мидлета:

Код

Running with storage root C:\Documents and Settings\user\j2mewtk\2.5.2\appdb\MediaControlSkin
Running with locale: English_United Kingdom.1252
Running in the identified_third_party security domain
Not equals!
=== Upper case ===
0x1055 0x1088 0x1080 0x1074 0x1077 0x1090 
=== toLowerCase ===
0x1055 0x1088 0x1080 0x1074 0x1077 0x1090 
=== Lower case ===
0x1087 0x1088 0x1080 0x1074 0x1077 0x1090 

Непонятно откуда локаль вылезла English_United Kingdom.1252.

Окружение:
Eclipse Helios Service Release v2
MTJ EclipseME J2ME Development Tools for Eclipse v1.8.0 (тот же результат в Eclipseme v1.7.9)
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Кодировка файла с исходным кодом: UTF-8

При этом для обычного Java проекта (Java Project/Java Application) имею:

Код

Equals!
=== Upper case ===
0x1055 0x1088 0x1080 0x1074 0x1077 0x1090 
=== toLowerCase ===
0x1087 0x1088 0x1080 0x1074 0x1077 0x1090 
=== Lower case ===
0x1087 0x1088 0x1080 0x1074 0x1077 0x1090 


Это сообщение отредактировал(а) FiMa1 - 23.3.2011, 00:27
PM   Вверх
ivanovpv
Дата 23.3.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 10
Всего: 28



Выбери на эмуляторе правильную локаль и все станет как надо


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
oxigen
Дата 23.3.2011, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 12.4.2010

Репутация: 4
Всего: 4



И будет работать только на телефонах, где стоит "правильная" локаль?

Это сообщение отредактировал(а) oxigen - 23.3.2011, 11:10
PM MAIL   Вверх
FiMa1
Дата 23.3.2011, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Цитата(oxigen @ 23.3.2011,  11:06)
И будет работать только на телефонах, где стоит "правильная" локаль?

Ну, собственно проблема и была обнаружена под Java, запущенной из-под WindowsME на телефоне. На эмуляторах WTK также воспроизводится.
ivanovpv, спасибо, попробую сменить локаль отпишусь.

Это сообщение отредактировал(а) FiMa1 - 23.3.2011, 15:56
PM   Вверх
FiMa1
Дата 23.3.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Цитата(ivanovpv @ 23.3.2011,  09:23)
Выбери на эмуляторе правильную локаль и все станет как надо

В J2ME есть возможность только прочитать текущую локаль, но не установить.

Что же касается моей проблемы - нашел-таки. Даже странно, вчера ну буквально никак не мог поиском выйти на какое-либо описание, а сегодня даже в двух местах сразу. В том числе на этом форуме!

Во-первых: Convert char to lower case in J2ME without using the Character class.

Во-вторых: В J2me не работает что ли toUpperCase и toLowerCase для русских букв?

Ну а теперь подтверждение сказанному (J2ME CLDC API 1.1):
Цитата
Код

toLowerCase(char)

Declaration:
Код

public static char toLowerCase(char ch)

Description:
The given character is mapped to its lowercase equivalent; if the character has no lowercase equivalent, the
character itself is returned.

Note that by default CLDC only supports the ISO Latin-1 range of characters!

Of the ISO Latin-1 characters (character codes 0x0000 through 0x00FF), the following are uppercase:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \u00C0 \u00C1 \u00C2 \u00C3 \u00C4 \u00C5 \u00C6 
\u00C7 \u00C8 \u00C9 \u00CA \u00CB \u00CC \u00CD \u00CE \u00CF
\u00D0 \u00D1 \u00D2 \u00D3 \u00D4 \u00D5 \u00D6 \u00D8 \u00D9
\u00DA \u00DB \u00DC \u00DD \u00DE

Parameters:
ch - the character to be converted.

Returns: the lowercase equivalent of the character, if any; otherwise the character itself.

Since: JDK1.0

Ну и напоследок возможная реализация (ну или типа той, что может быть найдена по ссылке, приведенной выше):

Код

public static String cyrToLowerCase(String str) {
    char[] uppercaseCyrillics = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
            'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
            'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
    char[] lowercaseCyrillics = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з',
            'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у',
            'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };

    for (int i = 0; i < uppercaseCyrillics.length; i++) {
        str = str.replace(uppercaseCyrillics[i], lowercaseCyrillics[i]);
    }
        
    return str;
}


Это сообщение отредактировал(а) FiMa1 - 26.3.2011, 16:05
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.