Wykrywanie kodowania UTF-8 (jak to robi MS IDE)?

Problem z różnymi kodowaniami znaków polega na tym, że plik zawierający nie zawsze jest wyraźnie oznaczony. Istnieją niespójne konwencje oznaczania niektórych przy użyciu „znaczników kolejności bajtów” lub zestawień materiałowych. Ale w gruncie rzeczy musisz byćpowiedziano co to jest kodowanie plików, aby dokładnie je odczytać.

Budujemy narzędzia programistyczne, które odczytują pliki źródłowe, a to nas rozpacza. Mamy środki, aby określić wartości domyślne i wąchać BOMy itp. I dobrze radzimy sobie z konwencjami i ustawieniami domyślnymi. Ale miejsce, w którym my (i zakładam, że wszyscy inni) zostają zawieszeni, to pliki UTF-8, które nie są oznaczone BOM.

Najnowsze programy IDE MS (np. VS Studio 2010) najwyraźniej „wąchają” plik, aby określić, czy jest on kodowany w UTF-8 bez BOM. (Będąc w branży narzędziowej, chcielibyśmy być kompatybilni ze stwardnieniem rozsianym z powodu ich udziału w rynku, nawet jeśli oznacza to konieczność pokonania z nimi „głupiego” urwiska.) Jestem szczególnie zainteresowany tym, czego używają jako heurystyka (choć dyskusje na temat heurystyki są w porządku)? Jak to może być „właściwe”? (Rozważ kodowanie w formacie ISO8859-x interpretowane w ten sposób).

EDIT: Ten artykuł na temat wykrywania kodowania znaków / zestawów jest całkiem interesujący:http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

EDIT Grudzień 2012: Zakończyliśmy skanowanie całego pliku, aby sprawdzić, czy zawiera on jakiekolwiek naruszenia sekwencji UTF-8 ... a jeśli nie, nazywamy to UTF-8. Złą częścią tego rozwiązania jest dwukrotne przetwarzanie znaków, jeśli jest to UTF-8. (Jeśli nie jest to UTF-8, ten test prawdopodobnie określi to dość szybko, chyba że plik zdarzy się całemu 7-bitowemu ASCII, w którym punkt taki jak UTF-8 nie zaszkodzi).

questionAnswers(2)

yourAnswerToTheQuestion