forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Запросы на написание библиотек. Библиотеки запрашивать только здесь. (http://forum.boolean.name/showthread.php?t=5502)

Skythrone 20.09.2008 16:46

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Если это возможно, хорошо бы иметь библиотеки для быстрого преобразования кодировок строк. На форуме описано несколько (примерно одинаковых) решений для перекодирования win1251->UTF8, но это не очень удобно. Самое главное - что данные алгоритмы работают медленно. Приходится посимвольно считывать строку, брать Ord символа, потом делать Chr.
На реальных телефонах подобная обработка текста размером 5-10 кб уже ощутимо тормозит. Да и память жрёт.

Вопрос - есть ли на J2ME возможность быстрой (встроенной или низкоуровневой) конвертации кодировки строки?

odd 21.09.2008 08:01

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Цитата:

Сообщение от Skythrone (Сообщение 86513)
Если это возможно, хорошо бы иметь библиотеки для быстрого преобразования кодировок строк. На форуме описано несколько (примерно одинаковых) решений для перекодирования win1251->UTF8, но это не очень удобно. Самое главное - что данные алгоритмы работают медленно. Приходится посимвольно считывать строку, брать Ord символа, потом делать Chr.
На реальных телефонах подобная обработка текста размером 5-10 кб уже ощутимо тормозит. Да и память жрёт.

Вопрос - есть ли на J2ME возможность быстрой (встроенной или низкоуровневой) конвертации кодировки строки?

Действительно, в Java есть встроенный конвертер строк с одной кодировки в другую. Но я что-то стремаюсь его использовать. Может оказаться так, что на одном телефоне будет нормально работать, а другой какой-нибудь "серый" телефон может и не знать таких кодировок. Короче, такую библиотеку можно написать и довольно легко, но я тебя предупредил.
Всё же легче создать собственный алгоритм. Пусть медленно, зато надежно. Я могу добавить функции переконвертации строк, например в библиотеку Lib_str.

Skythrone 21.09.2008 08:59

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Ну, тогда в этом случае серый телефон всё равно не сможет отобразить символы на экране.

В общем, я буду тебе благодарен за либу.

И если есть возможность ускорить загрузку строк из тестовых ресурсов, будет тоже здорово. :)

Romanzes 21.09.2008 10:13

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Может кто-нить сделать либу для загрузки ресурса в виде строки?

Phantom 21.09.2008 16:44

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Я наверно смогу =) Как либу назвать?

Romanzes 21.09.2008 17:12

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Гы. Самое сложное в написании библотеки - придумать название :). Lib_res2str. Или можно Lib_res, на случай, если кто добавит функции для нормальной работы с ресурсами.

Phantom 21.09.2008 17:51

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Офигеть... Правильно мне сегодня друг сказал... По воскресениям телепатические способности усиливаются. Уже сделал =) И назвал именно Lib_res2str =) Вот: http://wc.webhop.net:8080/res2str.zip Считывает ресурс в строку в ASCII, могу попробовать сделать дополнительный параметр функции, который бы давал понять функции в какой кодировке читать ресурс - ASCII или UTF-8 =) Пока либу не выкладываю, так как на самом деле она слишком маленькая. Может ещё чего-то сделать и добавить?

Skythrone 21.09.2008 18:46

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Ага, сделай, пожалуйста, конвертилку в UTF8.

Phantom 21.09.2008 21:34

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Так. На счёт utf-8 погорячился. Не знаю пока как сделать. Сделал чтение в ansi (windows-1251). Теперь русские буквы отображаются нормально. У меня мысль появилась, может сделать чтение в различных кодировках? Или не стоит заморачиваться? Сейчас может читать в ascii и ansi. Если из ресурса читаем текст, то читаем как ansi, а если читаем бинарные данные, то читаем как ascii. Это если я правильно всё понимаю. =) В общем вот, ссылка та же самая: http://wc.webhop.net:8080/res2str.zip

Romanzes 21.09.2008 21:40

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Phantom_wc, спасибо! Вроде маленькая либа, а облегчает жизнь. Может сделаешь, чтоб можно было нормально (без зависания мидлета) работать с ресурсами? А то ReadLine, как известно, не айс.
Да, телепатия усиливается! Только это не от воскресенья, а от большого адронного коллайдера, там вчера что-то навернулось :-)

Phantom 21.09.2008 21:47

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Только вот я чего не понимаю. Чтобы русские буквы читать, делаем:
(char)((b>=0xc0&&b<=0xFF)?b+0x350:b)
В принципе всё понятно, конвертируем в юникод. Видел такие примеры на нескольких сайтов. И это работает. Но ведь в юникоде каждый символ занимает от 1 до 4 байт (так-то я говорю про utf-8, а не про юникод, или это одно и то же?), в частности символы русского языка - два байта. Поэтому такой вопрос. Как мы можем загнать в тип char русский символ в два байта, если он занимает в памяти один байт? О_о или я чего-то жёстко не понимаю?

Phantom 21.09.2008 21:50

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Romanzes, так. А какие именно функции сделать?

Romanzes 21.09.2008 22:11

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Ну, там ReadLine нормальную. Больше не могу придумать

Phantom 22.09.2008 10:09

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
Вот: http://wc.webhop.net:8080/res.zip
Там ридми лежит в архиве. Возможно лишнего наворотил заумного, но сделал это только чтобы либа весила меньше и не было почти одинаковых кусков кода в ней. И назвал Lib_res. Если одобрите, создам тему и выложу как полагается =)

Cliffe Snake 22.09.2008 14:17

Ответ: Запросы на написание библиотек. Библиотеки запрашивать только здесь.
 
У меня на теле в JVM нет ввода русских букв.
Сделайте плиз либу, чтобы был програмнный ввод символов.
Я на MP программку писал, может чем поможет.

Вот код:
PHP код:

program Programniy_vvod_russkimi_bukvami;
var 
ok:command
      
n,k,nl,kl,nn,kn,tim,np:integer
      
rd,ru,ed,eu,td,tu,txt,s:string
      
upc,lng:string;
  
begin 
    ok
:=createcommand('OK',CM_OK,2);
    
addcommand(ok);
    
rd:='.,?!0: _1=+-абвг2 деёжз3ийкл4 мно5  прс6  туфх7 цчшщъ8ыьэюя9';
    
ru:='.,?!0: _1=+-АБВГ2 ДЕЁЖЗ3ИЙКЛ4 МНО5  ПРС6  ТУФХ7 ЦЧШЩЪ8ЫЬЭЮЯ9';
    
ed:='.,?!0: _1=+-abc2  def3  ghi4  jkl5  mno6  pqrs7 tuv8  wxyz9 ';
    
eu:='.,?!0: _1=+-ABC2  DEF3  GHI4  JKL5  MNO6  PQRS7 TUV8  WXYZ9 ';
    
tu:=ru;td:=rd;
    
upc:='UPCASE';
    
lng:='rus';
    
repeat
      
     k
:=getkeyclicked;
     if (
k<>0then kl:=k
     
      
if (kl=42then begin 
        
if (upc='UPCASE'then upc:='downcase' else upc:='UPCASE';
        
kl:=0;
      
end;
      
      if (
kl=-7then begin 
        
if (lng='rus'then lng:='eng' else lng:='rus';
        
kl:=0;
      
end;
     
      if (
kl>47) and (nl>47then if (nl=klthen nn:=nn+1;
     
      if (
nn>6then nn:=1;
      if (
nl>42) and (kl<>nl) and (nn>0) and (kl<>0)then begin
        kn
:=nn+(nl-48)*6+4;
        
nn:=0;
       
end;
         
      if (
nn>=1then kl:=else nl:=kl;
      
      if (
lng='rus'then 
        begin
          td
:=rd;
          
tu:=ru;
        
end 
      
else
        
begin
          td
:=ed;
          
tu:=eu;
        
end
       if (
np<>nnthen tim:=0
       if (
tim>30then begin kn:=nn+(nl-48)*6+4tim:=0nn:=0end;
        
np:=nn;
        
tim:=tim+1;
      
      if (
kn>4then
      begin
        
if upc='UPCASE' then 
          txt
:=txt+getchar(tu,kn-5
         else
          
txt:=txt+getchar(td,kn-5);
        
kn:=0;
      
end
      
      
if (kl=-8) and (length(txt)>0then begin 
        txt
:=copy(txt0length(txt)-1);
        
kl:=0;
      
end;
      
     
kn:=nn+(nl-48)*6+4;
     if 
upc='UPCASE' then 
          s
:=getchar(tu,kn-5
         else
          
s:=getchar(td,kn-5);
     
kn:=0;
      
     
setColor(200255255);
     
fillrect(0,0,240,320);
     
setColor(000);
     
drawtext(''+nl,10,10);
     
setColor(02550);
     
drawtext(s,10,30);
     
drawtext(upc,50,50);
     
drawtext(lng,10,50);
     
setColor(00255);
     
drawtext(txt,10,70);
     
drawtext(''+tim,10,90);
     
repaint;
     
until (kl=-) or (getclickedcommand=ok);
  
end



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

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