|
Основной форум Сюда все проблемы связанные с программированием. |
18.10.2008, 02:12
|
#16
|
Элита
Регистрация: 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
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
Сделал либу для мидлет паскаля. Точнее сказать, переписал предыдущую. Результаты ужасные. Убрал из либы цикл, открытие/закрытик ресурса, кое-что переделал, то есть цикл для считывания и открытие/закрытие ресурса теперь надо в паскале организовывать. Организовал. Считывание стало в десятки раз медленнее!!! Вот это жо..а! Раньше на Сименсе длинный текст открывался за 700 с чем-то милисекунд, а сейчас я вообще не дождался. Укоротил текст раз в 50, тогда только открыл за две секунды. Видимо и длинный открыл бы... Минуты через две... Полагаю, либу выкладывать нет смысла. Нужно цикл в java организовывать, а не в паскале...
|
(Offline)
|
|
21.10.2008, 18:21
|
#18
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Конвертирование кодировки utf для отображ&
Наконецто, для русского языка написал
//********************************************************** function toUtf8code(St: string): string; var i,n,pr: Integer; 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+chr( stringtointeger((integertostring((ord(ch)) +896) ))); end; if old=chr(209) then begin s:=s+chr( stringtointeger((integertostring((ord(ch)) +960) ))); end; oldisruKey:=false; end; if ch>=chr(208) then oldisruKey:=true; old:=ch; //208 154 end; toUtf8code:=s; end; //1106 8216
|
(Offline)
|
|
22.10.2008, 13:07
|
#19
|
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
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Конвертирование кодировки utf для отображ&
Scader это если исходная 1251 то да в моем случае получаю utf8 строку кодирую её в юникод телефона
в utf8 русские символы = 2 байта латиница ипр символы до 128 - 1 байт
|
(Offline)
|
|
24.10.2008, 07:00
|
#21
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
А перекодировщик из UTF8 обратно в Win у кого нибудь есть?
Просто если ищешь какое-то слово в файле ресурсов, то быстрее уже искать Win слово чем каждую строку переконвертировать в UTF8 и затем уже искать.
|
(Offline)
|
|
24.10.2008, 16:08
|
#22
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
А ты считай ресурс в строку и в ней ищи.
|
(Offline)
|
|
25.10.2008, 06:49
|
#23
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра

Сообщение от Phantom_wc
А ты считай ресурс в строку и в ней ищи.
|
Та ну нафиг. А если ресурс занимает мегабайт? Так и оперативки не хватит. Там и так поиск придется делать в несколько потоков...
|
(Offline)
|
|
25.10.2008, 09:30
|
#24
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
О_о... Я читал, что некоторые телефоны при открытии ресурса сразу в оперативу файл помещают, независимо от того, читаешь ты из него что-то или нет. Вроде про нокии так написано было. И поэтому, я считаю, что такой огромный ресурс и класть в прогу не стоит. гг
|
(Offline)
|
|
26.10.2008, 07:58
|
#25
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
Я лично наблюдал, что даже на тормознутом сименсе работает англо/русский словарь, размером в распакованном виде чуть более 2 Мб, а ведь там оперативки мало. Хотя на Нокии может быть всё что угодно.
|
(Offline)
|
|
10.11.2008, 05:12
|
#26
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
О_о Офигеть... В инструкции к семёнам я читал, что они могут работать с Джава приложениями, размер которых не превышает 360 килобайт. И действительно, сколько приложений я пытался ставить хотя бы немного превышающие этот лимит, приложение не запускалось и выдавало какую-то ошибку. Какую именно понятия не имею, это было ещё во времена, когда я даже не знал, что такое php, не то что Java =)
|
(Offline)
|
|
10.11.2008, 11:59
|
#27
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 637 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра&
Я запускал на своем древнем семёне java-книгу размером >700 КБ. Качал через оперу мини, потому что стандартный браузер не позволяет скачивать такие большие приложения.
|
(Offline)
|
|
28.03.2009, 20:15
|
#28
|
AnyKey`щик
Регистрация: 27.03.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
Помогите!!! как с этими кодировками работать!?? я реально уже целый день с ними справится не могу сил уже нет!!! пользуюсь либой encoding, на хосте в UTF8 ответ отправляю, из какой кодировки в какую переводит? когда данные отправляю и получаю.
|
(Offline)
|
|
28.03.2009, 21:03
|
#29
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
По идее, если сразу UTF-8 отправляется, то ничего конвертировать не надо, но на деле бывают всякие непонятные проблемы.
|
(Offline)
|
|
28.03.2009, 21:24
|
#30
|
AnyKey`щик
Регистрация: 27.03.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Конвертирование кодировки utf для отобра
Вот данные из интернета я обрабатываю через функцию которую выше написал Kurdt, у меня кирилица нормально отображаеться, дайте пожалуиста функцию чтобы GET POSR запросы обробатывать перед отправкой, и фообще в какой кодировке в телефоне тект который я в нем набираю
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:11.
|