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

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

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

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 18.10.2008, 02:12   #16
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Конвертирование кодировки utf для отобра&

Даже если это двухбайтный юникод, будут крякозябры! Объясняю ещё раз. Считываем побайтно и приписываем каждый байт по очереди к строке. А каждый байт (БАЙТ, но не СИМВОЛ) в строке становится юникодным. Тебе ВО ВРЕМЯ ЧТЕНИЯ из интернета нужно по два байта объединять и только тогда присоединять к строке. Типа считываешь один байт, умножаешь его на 256, потом считываешь второй байт, прибавляешь его к предыдущему И ТОЛЬКО ПОСЛЕ ЭТОГО присоединяешь то, что получилось, с меткой (char) к строке.
- - -
Только дописал и сообразил, что у тебя не двухбуйтный юникод. Юникод ведь не так вроде в файлах хранят. У тебя скорее всего UTF-8. Вот моя функция как раз парсит принимаемый поток байт. Она имеет 4 "буферных" байта:
int b1,b2,b3,b4;
Именно четыре байта нужно, чтобы хранить самые "большие" символы в UTF-8. А из скольки именно состоит символ можно узнать по первому байту. Вот так и парсится поток. Но чуть сложнее, чем я выше описал, так как нужно ещё в юникод перевести полученный текст. Кто серьёзно хочет вникнуть, прочитайте в википедии про UTF-8 и UNICODE, и зацените же, наконец, мою функцию. Я старался =) Поймите же, мультибайтные кодировки просто так в строку не запишешь в Java (да и вообще наверное нигде).
- - -
Я не знаю, как ещё понятнее объяснить. В Java в строках используется ВСЕГДА UNICODE. Если мы что-то присваиваем к строковой переменной, то каждый "байт" в этой строке имеет код юникода (то есть он может быть и больше 255, то есть это не байт даже, а символ). Даже если вы считываете однобайтную кодировку типа ANSI, то при присваивании такого текста строке происходит конвертация в юникод ВСЕХ символов с кодами больше 127 (те, что меньше 128 и в юникоде тоже один байт). То есть КОДЫ БАЙТОВ меняются и становятся больше 255. Байт имеет свой старый код, пока его не приконкатенировали к строке.
- - -
Ща напишу функцию, которая будет при вызове считывать ОДИН символ из потока (UTF-. Но это совершенно НЕ ОЗНАЧАЕТ, что из потока при вызове этой функции будет считатан ровно один байт. Если байт в потоке не в UTF-8, то... Даже хз пока что будет, так как парсер сбиться может. Подумаю ещё.

Последний раз редактировалось Phantom, 18.10.2008 в 02:29.
(Offline)
 
Ответить с цитированием
Старый 18.10.2008, 04:03   #17
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Конвертирование кодировки utf для отобра

Сделал либу для мидлет паскаля. Точнее сказать, переписал предыдущую. Результаты ужасные. Убрал из либы цикл, открытие/закрытик ресурса, кое-что переделал, то есть цикл для считывания и открытие/закрытие ресурса теперь надо в паскале организовывать. Организовал. Считывание стало в десятки раз медленнее!!! Вот это жо..а! Раньше на Сименсе длинный текст открывался за 700 с чем-то милисекунд, а сейчас я вообще не дождался. Укоротил текст раз в 50, тогда только открыл за две секунды. Видимо и длинный открыл бы... Минуты через две... Полагаю, либу выкладывать нет смысла. Нужно цикл в java организовывать, а не в паскале...
(Offline)
 
Ответить с цитированием
Старый 21.10.2008, 18:21   #18
Kurdt
ПроЭктировщик
 
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений
(для 25 пользователей)
Re: Конвертирование кодировки utf для отображ&

Наконецто, для русского языка написал

//**********************************************************

function toUtf8code(Ststring): string;
var
  
i,n,prInteger;
  
s:string;
  
ch,old:char;
  
oldisruKey:boolean;
begin
n
:=0;
oldisruKey:=false;
for 
i:=0 to length(st)-1do 
            
begin            
            ch
:=getChar(st,i);
            
n:=ord(ch);
            If 
n<208 then if not oldisruKey then s:=s+ch;
            if 
oldisruKey then 
                begin
            
if old=chr(208)  then begin
                    s
:=s+chrstringtointeger((integertostring((ord(ch))  +896) )));
                    
end;

            if 
old=chr(209)  then begin
                    s
:=s+chrstringtointeger((integertostring((ord(ch))  +960) )));
                    
end;


                    
oldisruKey:=false;
                
end;


if 
ch>=chr(208then oldisruKey:=true;

old:=ch//208 154


                      
end;
        
toUtf8code:=s;
end;

//1106 8216 
(Offline)
 
Ответить с цитированием
Старый 22.10.2008, 13:07   #19
Scader
AnyKey`щик
 
Регистрация: 03.07.2008
Сообщений: 1
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Re: Конвертирование кодировки utf для отобра

function trans(s: string):string;
var s1: string;
gc: integer;
begin
s1:='';
for i:=0 to length(s) do
begin
gc:=ord(getChar(s,i));
if (gc>223) then
begin
s1:=s1+chr(848+gc);
end;
if (gc<223) then
begin
s1:=s1+chr(gc);
end;
end;
trans:=s1;
end;

у меня этот код работает, если я получаю данные из нета (перекодирует маленькие русские буквы, а латиницу и другие символы оставляет без изменения), а вот с ресурсами хуже, еще не разобрался, тот код, который выложен выше у меня не работает
(Offline)
 
Ответить с цитированием
Старый 22.10.2008, 13:38   #20
Kurdt
ПроЭктировщик
 
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений
(для 25 пользователей)
Re: Конвертирование кодировки utf для отображ&

Scader это если исходная 1251 то да в моем случае получаю utf8 строку кодирую её в юникод телефона
в utf8 русские символы = 2 байта латиница ипр символы до 128 - 1 байт
(Offline)
 
Ответить с цитированием
Старый 24.10.2008, 07:00   #21
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Конвертирование кодировки utf для отобра

А перекодировщик из UTF8 обратно в Win у кого нибудь есть?
Просто если ищешь какое-то слово в файле ресурсов, то быстрее уже искать Win слово чем каждую строку переконвертировать в UTF8 и затем уже искать.
(Offline)
 
Ответить с цитированием
Старый 24.10.2008, 16:08   #22
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Конвертирование кодировки utf для отобра

А ты считай ресурс в строку и в ней ищи.
(Offline)
 
Ответить с цитированием
Старый 25.10.2008, 06:49   #23
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Конвертирование кодировки utf для отобра&#10

Сообщение от Phantom_wc Посмотреть сообщение
А ты считай ресурс в строку и в ней ищи.
Та ну нафиг. А если ресурс занимает мегабайт? Так и оперативки не хватит. Там и так поиск придется делать в несколько потоков...
(Offline)
 
Ответить с цитированием
Старый 25.10.2008, 09:30   #24
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Конвертирование кодировки utf для отобра

О_о... Я читал, что некоторые телефоны при открытии ресурса сразу в оперативу файл помещают, независимо от того, читаешь ты из него что-то или нет. Вроде про нокии так написано было. И поэтому, я считаю, что такой огромный ресурс и класть в прогу не стоит. гг
(Offline)
 
Ответить с цитированием
Старый 26.10.2008, 07:58   #25
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Конвертирование кодировки utf для отобра

Я лично наблюдал, что даже на тормознутом сименсе работает англо/русский словарь, размером в распакованном виде чуть более 2 Мб, а ведь там оперативки мало. Хотя на Нокии может быть всё что угодно.
(Offline)
 
Ответить с цитированием
Старый 10.11.2008, 05:12   #26
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Конвертирование кодировки utf для отобра

О_о Офигеть... В инструкции к семёнам я читал, что они могут работать с Джава приложениями, размер которых не превышает 360 килобайт. И действительно, сколько приложений я пытался ставить хотя бы немного превышающие этот лимит, приложение не запускалось и выдавало какую-то ошибку. Какую именно понятия не имею, это было ещё во времена, когда я даже не знал, что такое php, не то что Java =)
(Offline)
 
Ответить с цитированием
Старый 10.11.2008, 11:59   #27
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Конвертирование кодировки utf для отобра&

Я запускал на своем древнем семёне java-книгу размером >700 КБ. Качал через оперу мини, потому что стандартный браузер не позволяет скачивать такие большие приложения.
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 20:15   #28
Ultimat
AnyKey`щик
 
Регистрация: 27.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Конвертирование кодировки utf для отобра

Помогите!!! как с этими кодировками работать!?? я реально уже целый день с ними справится не могу сил уже нет!!! пользуюсь либой encoding, на хосте в UTF8 ответ отправляю, из какой кодировки в какую переводит? когда данные отправляю и получаю.
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 21:03   #29
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Конвертирование кодировки utf для отобра

По идее, если сразу UTF-8 отправляется, то ничего конвертировать не надо, но на деле бывают всякие непонятные проблемы.
(Offline)
 
Ответить с цитированием
Старый 28.03.2009, 21:24   #30
Ultimat
AnyKey`щик
 
Регистрация: 27.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Конвертирование кодировки utf для отобра

Вот данные из интернета я обрабатываю через функцию которую выше написал Kurdt, у меня кирилица нормально отображаеться, дайте пожалуиста функцию чтобы GET POSR запросы обробатывать перед отправкой, и фообще в какой кодировке в телефоне тект который я в нем набираю
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Во сколько оценивается создание интерне& Nunan Болтовня 3 28.10.2008 14:33
Все статьи, уроки,дополнения, ошибки компl anton_obuhov Основной форум 3 14.09.2008 13:11
Работа нескольких программ в одной anton_obuhov Основной форум 4 10.09.2008 11:15
куплю исходник военной стратегии на blitz3d эд Blitz3D 15 18.02.2008 15:50
А вот и ещё тема по текстурированию ландшk CRASHER Создание текстур 4 16.01.2008 18:10


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


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