Mailinglisten-Archive |
>Aus einer Datei werden jeweils UTF-8 codierte DoppelBytes > nicht ganz richtig... UTF-8 definiert eine variable laenge von zeichen. d.h. zeichen mit dem wert 0-0x7f werden mit einem byte kodiert... dieses 1 byte kann man einfach als entity darstellen (soweit ich weiss ist ja ein entity ein &# plus den zahlenwert plus ; ?) alle zeichen mit wert > 0x7f werden als mehre bytes kodiert... (nicht zwingend 2! - bis max. 6 bytes) als kleine uebersicht sieht das ungefaehr so aus... U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx als am besten mit hilfe von bitmasken die bit-prefixe scannen und so die anzahl der bytes ermitteln, die das zeichen kodieren. anschliessen von den entsprechenden bytes die prefixe ausmaskieren und dann zusammenwuerfeln. der gefundene wert sollte dann dem entsprechenden zahlenwert entsprechen... z.bsp: orginal: 208 173 als bin: 1101 0000 1010 1101 wir erkennen: diese beiden bytes kodieren schon vollstaendig das zeichen... ausmaskieren der prefixe: 0001 0000 und 0010 1101 und nun noch so zusammenwuerfen, dass die obersten beiden bits aus dem zweiten byte verschwinden: $lowbyte = 45; $highbyte = 16; // 6 bits nach links verschieben & die // freigewordenen bits mit den zweiten byte // besetzen $word = ($highbyte << 6) | $lowbyte; und raus kommt.... 0000 0100 0010 1101 = 1069 hoffe das war hilfreich... (google hilft) thomas richter
php::bar PHP Wiki - Listenarchive