[ Goran Rakić @ 04.01.2004. 21:53 ] @
Kako da u C-u uradim urlencode UTF8 char niza? Imam funkciju koja to radi za ASCII tekst, ali kako da uradim za UTF8 kodirani tekst? Svaka pomoć dobrodošla. |
[ Goran Rakić @ 04.01.2004. 21:53 ] @
[ -zombie- @ 05.01.2004. 02:44 ] @
// napomena: nisam siguran, ali po svoj logici stvari bi trebalo da je ovako.
kratak odgovor: samo url-enkoduj kao običan ascii string. dugačak odgovor: utf-8 je enkodovanje koje prvih 127 karaktera ne dira (znači isti su i u ascii i u utf-8 enkodingu), a za karaktere čiji je unicode broj veći od 127 koristi dva ili više bajtova, tako što je svakom setovan najviši bit (vrednosti 128). dakle ako enkoduješ string "dugačko" sa utf-8 dobićeš niz u 8bitnom askii formatu gde če sva slova sem slova č biti predstavljena preko jednog bajta, a slovo č preko dva bajta sa setovanim najvišim bitom, sa vrednostima c4 i 8d. i kad konačno to enkoduješ sa url-encode, onda će opet sva slova sem č biti normalno enkodovana kao običan ascii, a slovo č sa %C4%8D. dakle ceo string će biti "duga%C4%8Dko". kada to url-dekoduješ, dobiješ opet "dugačko" gde je č predstavljeno sa dva bajta c4 i 8d. [ leka @ 05.01.2004. 02:49 ] @
Na www.unicode.org imas gotov C kod za raznorazna "tumbanja" stringova, ja sam davno naisao na to, i sada se setih da to postoji...
[ Goran Rakić @ 05.01.2004. 16:55 ] @
Problem je što meni treba "č" prikazano kao "%E8", a ne kao "%C4%8D"
Osim dela source koda PHP-a koji zbog skakanja iz jedne php-related funkcije u drugu ne mogu da skapiram (urlencode() u php-u radi kako treba) nisam uspeo da pronađem ni algoriatam kako treba da izgleda urlencode multibyte stringa. Sadašnji kod radi upravo ovo što je i -zombie- rekao. Pogledaću unicode.org [ Goran Rakić @ 05.01.2004. 17:00 ] @
Zapravo sam ipak pogrešio. Funkcioniše enkodeovanje svakog bajta pojedinačno. Kada se to dekoduje dobije se ispravna vrednost svakog bajta, a to sastavljeno kada se čita kao UTF8 daje ispravan UTF8 string.
Moj propust. Hvala. [ -zombie- @ 06.01.2004. 04:36 ] @
nema na čemu, nego samo kratko objašnjenje.
%E8 ne bi imao šanse da dobiješ sa unikodom, nego eventualno sa jednobajtnim enkodovanjima kao što su win-1250 i iso-8859-2 (u stvari sigurno). ako je č predstavljeno sa 2 bajta u UTF-8 (a to je najkompaktnije unicode enkodovanje), nikako ne bi mogao da ga urlenkoduješ sa jednim bajtom od %00 do %FF. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|