Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 08.10.2008, 03:50   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
UTF-8 и J2me

Сначала написал это на http://blackstrip.ru/ , а сейчас слово в слово пишу тут:
- - -
Я вот сегодня узнал, что в java строки в unicode. А до этого думал, что в utf-8. Самое интересное, что джава сама приводит ASCII к юникоду. Предположим считываю я из ресурса текст побайтно и присваиваю байты строковой переменной. Каждый из байтов принимает в строке формат юникода. Например, пишем так:
String s=(char)0xff;
0xff - это русская буква "я". После компилирования в классе (если его тупо открыть в блокноте) можно будет найти эту букву "я" в кодировке unicode в виде двух байт (каких именно не помню, лень рассчитывать), для наглядности можно написать целый текст, примерно, так:
String s=(char)0xff+(char)0xda+(char)0xe1+(char)0x98+(cha r)0xfa+(char)0xa3+(char)0xa1+(char)0xf0;
То есть ещё на этапе компиляции все явно заданные строки конвертируются в unicode. Я хз, может я последний человек на земле, который всего этого не знал =) Но тему не для этого создал. Я поставил перед собой задачу написать функцию, которая сможет считывать файлы в utf-8. Сложностей оказалось две:
1) Utf-8 - мультибайтная кодировка текста, каждый символ которой кодируется последовательностью от 1 до 6 байт (в реальности используются только 1-4 байта, так как их хватает за глаза). А текст считывается из файла побайтно, а не посимвольно, что логично. Следовательно каждый символ надо при считывании собирать из последовательности байт, длину которой тоже надо на лету рассчитывать, а только потом конкатенировать к строке.
2) Собственно там же, на лету, надо ещё превести каждый символ к кодировке unicode.

Ну так вот. Заюзав это: http://ru.wikipedia.org/wiki/UTF-8 , написал функцию =)
 public static String read(String r){
   try{
    InputStream i=M.T.getClass().getResourceAsStream(r);
    StringBuffer s;
    s=new StringBuffer();
    int b1,b2,b3,b4;;
    while((b1=i.read())!=-1){
     if(b1<0x80){
      s.append((char)b1);
     }else if(b1>0xEF&&b1<0xF8){
      b2=i.read(); b3=i.read(); b4=i.read();
      s.append((char)((b1-0xf0)*0x40000+(b2-0x80)*0x1000+(b3-0x80)*0x40+b4-0x80));
     }else if(b1>0xDF){
      b2=i.read(); b3=i.read();
      s.append((char)((b1-0xE0)*0x1000+(b2-0x80)*0x40+b3-0x80));
     }else if(b1>0xbF){
      b2=i.read();
      s.append((char)((b1-0xC0)*0x40+b2-0x80));
     }else{
      s=null;
      break;
     }
    }
    i.close();
    return s.toString();
   }catch(Exception ex){
    return "";
   }
 }
Передаём ей в качестве параметра название ресурса вида /res.txt и функция возвращает его содержимое в виде строки =) Содержимое ресурса разумеется должно быть в utf-8. Ресурс весом в 40 килобайт мой сименс загружает за 711 милисекунд, то есть меньше секунды. А я, надо сказать, волновался по этому поводу, думал, что будет секунд 10 грузить =) Но даже с такими довольно неплохими результатами меня смущает мой код. Мне кажется, я лишнего там наворотил. Хочу спросить, можно ли как-то оптимизировать код? А то я в школе информатику не изучал, с байтами толком не работал, возможно, можно рассчёты как-то сократить?
- - -
P.S: M - это класс мидлет паскаля, я в виде либы для него писал. Через него обратился к getResourceAsStream().
(Offline)
 
Ответить с цитированием
Старый 16.10.2008, 14:09   #2
Kurdt
ПроЭктировщик
 
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений
(для 25 пользователей)
Re: UTF-8 и J2me

а как передать не ресурс а сроку?
(Offline)
 
Ответить с цитированием
Старый 16.10.2008, 23:51   #3
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: UTF-8 и J2me

Kurdt, Все, кому интересно, смотрим тут:
http://forum.boolean.name/showthread.php?p=88996
Только что написал. =)
(Offline)
 
Ответить с цитированием
Старый 10.09.2009, 23:10   #4
LeonSmile
AnyKey`щик
 
Аватар для LeonSmile
 
Регистрация: 08.09.2009
Адрес: Россия
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
UTF 8 и J2me

MC в своей жизни никогда не умел utf8. Он долгое время порядка двух лет не обновлялся. Но написано куча патчей. И во freebsd как я вижу из портов он ставиться с патчем mc-4.6.2-utf8.patch

Буквально месяц назад была новость что его опять начали разрабатывать. Так что стоит ждать новых версий.

Какая у Вас ОС и что именно с UTF не так?
(Offline)
 
Ответить с цитированием
Старый 11.09.2009, 04:19   #5
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: UTF-8 и J2me

LeonSmile,
1) Посмотри на дату последнего сообщений перед твоим.
2) Мы тут как бе обсуждаем J2me, а из твоего поста я вообще мало чего понял.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение J2ME с 0 Anubi$ FAQ 4 05.12.2009 14:58
Требуется j2me программист. Якубович Болтовня 0 31.08.2009 14:55
Pascal и J2ME Piligrim MidletPascal 35 17.07.2008 18:33
Книги по j2me pax JAVA Micro Edition 5 22.03.2007 16:34


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com