Re: [Hackmeeting] Fwd: Still exceeding expectations... 30 an…

Delete this message

Reply to this message
Autor: gofef
Data:  
Dla: hackmeeting
Temat: Re: [Hackmeeting] Fwd: Still exceeding expectations... 30 anni e non lidimostra
Wed, 24 Oct 2007 20:53:20 +0200 mikro <mikro@???> ha scritto:

> > premesso che utf-8 è merda, il forward che hai fatto ha negli header
> Per quale ragione??? Io lo trovo una gran figata!!!
> Cos'ha che nn va utf???


http://en.wikipedia.org/wiki/Utf-8
1. One byte is needed to encode the 128 US-ASCII characters (Unicode range U+0000 to U+007F).
2. Two bytes are needed for Latin letters with diacritics and for characters from Greek, Cyrillic, Armenian, Hebrew, Arabic, Syriac and Thaana alphabets (Unicode range U+0080 to U+07FF).
3. Three bytes are needed for the rest of the Basic Multilingual Plane (which contains virtually all characters in common use). [tutte le lingue dell'Asia orientale stanno per intero qui]
4. Four bytes are needed for characters in the other planes of Unicode, which are rarely used in practice.

per cui praticamente, a parità di caratteri, in utf-8 un testo in una qualsiasi lingua dell'asia orientale (cinese giapponese ecc.) pesa tre volte un testo in inglese/americano (3 volte la banda e lo storage ecc. --- via mail con quoted-printable pesa 3*3=9 volte); un testo in greco, cirillico, armeno, ebraico, arabo, siriano, thaana pesa 2 volte un testo in inglese/americano (2 volte la banda e lo storage ecc. --- via mail con quoted-printable pesa 2*3=6 volte).
un testo in italiano pesa un pochino di più che in inglese/americano.

quindi va bè che in cinese per es. si usano meno 'caratteri' per esprimere 'la stessa cosa' (ma nelle altre lingue più diffuse se ne usa più o meno la stessa misura), cmq se utf-8 fosse davvero usato da tutti, a parità di caratteri per la comunicazione testuale informatica un cinese e un taiwanese pagherebbero-consumerebbero 3 volte la banda e lo spazio di storage di un inglese e di un americano, un greco un russo un armeno un ebreo un siriano un thaana (?) 2 volte, gli italiani un pochino di più.

lo stesso testo in greco, russo, armeno, ebraico, arabo, nelle lingue dell'est asiatico ecc., in utf-8 pesa (almeno quasi sempre, credo) di più che non a usare le 'vecchie' codepage; per es. tutti i caratteri dell'alfabeto italiano con iso-8859-1 sono codificati su 1 byte, mentre le accentate in utf-8 su 2; i caratteri greci e cirillici con le loro codepage immagino stiano pure tutti su un 1 byte; e le lingue i cui caratteri 'non ci stan tutti su un byte' credo pesino cmq meno nelle loro codepage 'vecchie', cioè immagino che codifichino 'in ordine alfabetico' 'quello che ci sta su un byte, poi su 2 ...' (mentre con utf-8 tutti i caratteri cinesi, per es., sono codificati su 3 byte).

quindi alla fine per fare una codifica che comprenda tutti i caratteri di tutte le lingue e che non determini una situazione per cui una persona di un paese paga-consuma di più in termini di banda spazio storage ecc. rispetto a una persona di un altro solo perché di lingua diversa, bisogna distribuire equamente tutti i caratteri nello spazio totale della codifica, per farlo davvero bisogna buttare via ascii e l'idea che gli altri debbano esserne superset, così come tutte le codepage precedenti, guarda questo luminoso es. in php :D

<?php

/*
(un po' di)
armeno
cinese
italiano
sinhala
*/

$n="\n";

$alfabeti=array(
    array('Ա', 'Բ', 'Գ', 'Դ', 'Ե', 'Զ', 'Է', 'Ը', 'Թ', 'Ժ', 'Ի', 'Լ', 'Խ', 'Ծ', 'Կ', 'Հ', 'Ձ', 'Ղ', 'Ճ', 'Մ', 'Յ', 'Ն', 'Շ', 'Ո', 'Չ', 'Պ', 'Ջ', 'Ռ', 'Ս', 'Վ', 'Տ', 'Ր', 'Ց', 'Ւ', 'Փ', 'Ք', 'Օ', 'Ֆ'),
    array('⾑', '⾒', '⾓', '⾔', '⾕', '⾖', '⾗', '⾘', '⾙', '⾚', '⾛', '⾜', '⾝', '⾞', '⾟', '⾠', '⾡', '⾢', '⾣', '⾤', '⾥', '⾦', '⾧', '⾨', '⾩', '⾪', '⾫', '⾬', '⾭', '⾮', '⾯', '⾰', '⾱', '⾲', '⾳', '⾴', '⾵', '⾶', '⾷', '⾸', '⾹', '⾺', '⾻', '⾼', '⾽', '⾾', '⾿', '⿀', '⿁', '⿂', '⿃', '⿄', '⿅', '⿆', '⿇', '⿈', '⿉', '⿊', '⿋', '⿌', '⿍', '⿎', '⿏', '⿐', '⿑', '⿒', '⿓', '⿔', '⿕'),
    array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'z'),
    array('ත', 'ථ', 'ද', 'ධ', 'න', 'ඳ', 'ප', 'ඵ', 'බ', 'භ', 'ම', 'ඹ', 'ය', 'ර', 'ල', 'ව', 'ශ', 'ෂ', 'ස', 'හ', 'ළ', 'ෆ')
);


$qalfa=count($alfabeti);
$totcar=0;

for ($i=0; $i<$qalfa; $i++)
    $totcar+=count($alfabeti[$i]);


echo('totale caratteri: '.$totcar.$n);

$unicode=array();

for ($i=0; $i<$qalfa; $i++) {
    $q=count($alfabeti[$i]);
    $passo=$totcar/$q;
    echo('alfabeto '.$i.': '.$q.' caratteri; passo: '.$step.$n);
    for ($ii=0; $ii<$q; $ii++)
        $unicode[$alfabeti[$i][$ii]]=$step*($ii+0.1);
}


asort($unicode);
reset($unicode);

$i=0;
foreach ($unicode as $key=>$val) {
    $unicode[$key]=$i;
    $i++;
}


$str='--- unicode ---'.$n;
foreach ($unicode as $key=>$val)
    $str.=$key;
$str.=$n;
echo($str);


for ($i=0; $i<$qalfa; $i++) {
    $q=count($alfabeti[$i]);
    echo('--- alfabeto '.$i.' ---'.$n);
    for ($ii=0; $ii<$q; $ii++)
        echo($alfabeti[$i][$ii].' -> U+'.dechex($unicode[$alfabeti[$i][$ii]]).' (dec.: U+'.$unicode[$alfabeti[$i][$ii]].')'.$n);
}


exit(0);

?>


totale caratteri: 150
alfabeto 0: 38 caratteri; passo: 3.94736842105
alfabeto 1: 69 caratteri; passo: 2.17391304348
alfabeto 2: 21 caratteri; passo: 7.14285714286
alfabeto 3: 22 caratteri; passo: 6.81818181818
--- unicode ---
⾑Աතa⾒Բ⾓⾔ථbԳ⾕⾖Դ⾗දc⾘Ե⾙⾚Զධ⾛dԷ⾜⾝නԸ⾞e⾟Թ⾠ඳ⾡Ժf⾢⾣Ի⾤පg⾥Լ⾦Խ⾧ඵ⾨hԾ⾩⾪බԿ⾫i⾬Հ⾭භ⾮Ձl⾯Ղ⾰ම⾱Ճ⾲m⾳Մඹ⾴⾵nՅ⾶ය⾷Ն⾸o⾹Շර⾺Ո⾻p⾼Չ⾽ල⾾Պ⾿q⿀වՋ⿁⿂Ռr⿃ශՍ⿄⿅Վs⿆ෂ⿇Տ⿈⿉tՐස⿊⿋Ց⿌uහ⿍Ւ⿎Փ⿏vළ⿐Ք⿑⿒Օz⿓ෆ⿔Ֆ⿕
--- alfabeto 0 ---
Ա -> U+1 (dec.: U+1)
Բ -> U+5 (dec.: U+5)
Գ -> U+a (dec.: U+10)
Դ -> U+d (dec.: U+13)
Ե -> U+12 (dec.: U+18)
Զ -> U+15 (dec.: U+21)
Է -> U+19 (dec.: U+25)
Ը -> U+1d (dec.: U+29)
Թ -> U+21 (dec.: U+33)
Ժ -> U+25 (dec.: U+37)
Ի -> U+29 (dec.: U+41)
Լ -> U+2e (dec.: U+46)
Խ -> U+30 (dec.: U+48)
Ծ -> U+35 (dec.: U+53)
Կ -> U+39 (dec.: U+57)
Հ -> U+3d (dec.: U+61)
Ձ -> U+41 (dec.: U+65)
Ղ -> U+44 (dec.: U+68)
Ճ -> U+48 (dec.: U+72)
Մ -> U+4c (dec.: U+76)
Յ -> U+51 (dec.: U+81)
Ն -> U+55 (dec.: U+85)
Շ -> U+59 (dec.: U+89)
Ո -> U+5c (dec.: U+92)
Չ -> U+60 (dec.: U+96)
Պ -> U+64 (dec.: U+100)
Ջ -> U+69 (dec.: U+105)
Ռ -> U+6c (dec.: U+108)
Ս -> U+70 (dec.: U+112)
Վ -> U+73 (dec.: U+115)
Տ -> U+78 (dec.: U+120)
Ր -> U+7c (dec.: U+124)
Ց -> U+80 (dec.: U+128)
Ւ -> U+85 (dec.: U+133)
Փ -> U+87 (dec.: U+135)
Ք -> U+8c (dec.: U+140)
Օ -> U+8f (dec.: U+143)
Ֆ -> U+94 (dec.: U+148)
--- alfabeto 1 ---
⾑ -> U+0 (dec.: U+0)
⾒ -> U+4 (dec.: U+4)
⾓ -> U+6 (dec.: U+6)
⾔ -> U+7 (dec.: U+7)
⾕ -> U+b (dec.: U+11)
⾖ -> U+c (dec.: U+12)
⾗ -> U+e (dec.: U+14)
⾘ -> U+11 (dec.: U+17)
⾙ -> U+13 (dec.: U+19)
⾚ -> U+14 (dec.: U+20)
⾛ -> U+17 (dec.: U+23)
⾜ -> U+1a (dec.: U+26)
⾝ -> U+1b (dec.: U+27)
⾞ -> U+1e (dec.: U+30)
⾟ -> U+20 (dec.: U+32)
⾠ -> U+22 (dec.: U+34)
⾡ -> U+24 (dec.: U+36)
⾢ -> U+27 (dec.: U+39)
⾣ -> U+28 (dec.: U+40)
⾤ -> U+2a (dec.: U+42)
⾥ -> U+2d (dec.: U+45)
⾦ -> U+2f (dec.: U+47)
⾧ -> U+31 (dec.: U+49)
⾨ -> U+33 (dec.: U+51)
⾩ -> U+36 (dec.: U+54)
⾪ -> U+37 (dec.: U+55)
⾫ -> U+3a (dec.: U+58)
⾬ -> U+3c (dec.: U+60)
⾭ -> U+3e (dec.: U+62)
⾮ -> U+40 (dec.: U+64)
⾯ -> U+43 (dec.: U+67)
⾰ -> U+45 (dec.: U+69)
⾱ -> U+47 (dec.: U+71)
⾲ -> U+49 (dec.: U+73)
⾳ -> U+4b (dec.: U+75)
⾴ -> U+4e (dec.: U+78)
⾵ -> U+4f (dec.: U+79)
⾶ -> U+52 (dec.: U+82)
⾷ -> U+54 (dec.: U+84)
⾸ -> U+56 (dec.: U+86)
⾹ -> U+58 (dec.: U+88)
⾺ -> U+5b (dec.: U+91)
⾻ -> U+5d (dec.: U+93)
⾼ -> U+5f (dec.: U+95)
⾽ -> U+61 (dec.: U+97)
⾾ -> U+63 (dec.: U+99)
⾿ -> U+65 (dec.: U+101)
⿀ -> U+67 (dec.: U+103)
⿁ -> U+6a (dec.: U+106)
⿂ -> U+6b (dec.: U+107)
⿃ -> U+6e (dec.: U+110)
⿄ -> U+71 (dec.: U+113)
⿅ -> U+72 (dec.: U+114)
⿆ -> U+75 (dec.: U+117)
⿇ -> U+77 (dec.: U+119)
⿈ -> U+79 (dec.: U+121)
⿉ -> U+7a (dec.: U+122)
⿊ -> U+7e (dec.: U+126)
⿋ -> U+7f (dec.: U+127)
⿌ -> U+81 (dec.: U+129)
⿍ -> U+84 (dec.: U+132)
⿎ -> U+86 (dec.: U+134)
⿏ -> U+88 (dec.: U+136)
⿐ -> U+8b (dec.: U+139)
⿑ -> U+8d (dec.: U+141)
⿒ -> U+8e (dec.: U+142)
⿓ -> U+91 (dec.: U+145)
⿔ -> U+93 (dec.: U+147)
⿕ -> U+95 (dec.: U+149)
--- alfabeto 2 ---
a -> U+3 (dec.: U+3)
b -> U+9 (dec.: U+9)
c -> U+10 (dec.: U+16)
d -> U+18 (dec.: U+24)
e -> U+1f (dec.: U+31)
f -> U+26 (dec.: U+38)
g -> U+2c (dec.: U+44)
h -> U+34 (dec.: U+52)
i -> U+3b (dec.: U+59)
l -> U+42 (dec.: U+66)
m -> U+4a (dec.: U+74)
n -> U+50 (dec.: U+80)
o -> U+57 (dec.: U+87)
p -> U+5e (dec.: U+94)
q -> U+66 (dec.: U+102)
r -> U+6d (dec.: U+109)
s -> U+74 (dec.: U+116)
t -> U+7b (dec.: U+123)
u -> U+82 (dec.: U+130)
v -> U+89 (dec.: U+137)
z -> U+90 (dec.: U+144)
--- alfabeto 3 ---
ත -> U+2 (dec.: U+2)
ථ -> U+8 (dec.: U+8)
ද -> U+f (dec.: U+15)
ධ -> U+16 (dec.: U+22)
න -> U+1c (dec.: U+28)
ඳ -> U+23 (dec.: U+35)
ප -> U+2b (dec.: U+43)
ඵ -> U+32 (dec.: U+50)
බ -> U+38 (dec.: U+56)
භ -> U+3f (dec.: U+63)
ම -> U+46 (dec.: U+70)
ඹ -> U+4d (dec.: U+77)
ය -> U+53 (dec.: U+83)
ර -> U+5a (dec.: U+90)
ල -> U+62 (dec.: U+98)
ව -> U+68 (dec.: U+104)
ශ -> U+6f (dec.: U+111)
ෂ -> U+76 (dec.: U+118)
ස -> U+7d (dec.: U+125)
හ -> U+83 (dec.: U+131)
ළ -> U+8a (dec.: U+138)
ෆ -> U+92 (dec.: U+146)

....oppure senza buttare via ascii
http://www.kotovnik.com/~avg/rosetta/

:)

ciao