Rilevamento del set di caratteri in PHP

// ho aggiunto una nuova versione di questo, per favore vedi Cheating PHP interi . qualsiasi aiuto sarà molto apprezzato. Ho avuto un'idea di provare e hackerare l'opzione di archiviazione degli arrays comprimendo gli interi in byte senza segno (servono solo 8 o 16 bit interi per ridurre considerevolmente la memory).

Ciao

Attualmente sto lavorando su librerie di rilevamento charset personalizzate e ho creato una port dall'algorithm di rilevamento charset di Mozilla e ho usato chardet (la port python) per dare una mano. Tuttavia, questo è estremamente intenso in termini di memory in PHP (circa 30 MB di memory se carico solo il rilevamento della lingua occidentale). Ho ottimizzato tutto quello che posso senza riscriverlo da zero per caricare each pezzo (questo ridurrebbe la memory ma lo renderebbe molto più lento).

La mia domanda è che, conosci qualche libreria LGPL PHP che esegue il charset detection? Questo sarebbe puramente per la ricerca per darmi una leggera mano guida nella giusta direzione.

Conosco già mb_detect_encoding ma è troppo limitato e richiama troppi falsi positivi con i file di text che ho (eppure chardet di python li rileva perfettamente)

Ho creato un metodo che codifica correttamente in UTF-8. Ma è stato difficile capire cosa è attualmente codificato, quindi sono arrivato a questa soluzione:

<?php function _convert($content) { if(!mb_check_encoding($content, 'UTF-8') OR !($content === mb_convert_encoding(mb_convert_encoding($content, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) { $content = mb_convert_encoding($content, 'UTF-8'); if (mb_check_encoding($content, 'UTF-8')) { // log('Converted to UTF-8'); } else { // log('Could not converted to UTF-8'); } } return $content; } ?> 

Come puoi vedere faccio una conversione per verificare se è sempre la stessa (UTF-8/16) e se non la converto. Forse puoi usare un po 'di questo codice.

Prima di tutto, progetto interessante su cui stai lavorando! Sono curioso di sapere come sarà il prodotto finale.

Hai già dato un'occhiata al progetto ICU ?