Определить кодировку UTF-8 (как это делает MS IDE)?
Проблема с различными кодировками символов заключается в том, что содержащийся файл не всегда четко обозначен. Существуют противоречивые соглашения для маркировки некоторых с использованием «меток порядка следования байтов». или спецификации. Но по сути вы должны бытьtold что такое кодировка файла, чтобы прочитать его точно.
Мы создаем инструменты программирования, которые читают исходные файлы, и это дает нам горе. У нас есть средства для определения значений по умолчанию, сниффинга для спецификаций и т. Д. И мы довольно хорошо справляемся с соглашениями и значениями по умолчанию. Но место, где мы (и я полагаю, все остальные) зацикливаются на файлах UTF-8, которые не помечены как BOM.
Последние MS IDE (например, VS Studio 2010), по-видимому, будут "нюхать" файл, чтобы определить, закодирован ли он в кодировке UTF-8 без спецификации. (Находясь в сфере инструментов, мы хотели бы быть совместимыми с MS из-за их доли на рынке, даже если это означает необходимость пересекать с ними «тупой» утес.) Я особенно заинтересован в том, что они используют как эвристика (хотя обсуждение эвристики в порядке)? Как это может быть "правильно"? (Рассмотрим строку в кодировке ISO8859-x, интерпретированную таким образом).
РЕДАКТИРОВАТЬ: Эта статья об обнаружении кодировок / наборов символов довольно интересна: http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
РЕДАКТИРОВАТЬ Декабрь 2012: Мы прекратили сканирование всего файла, чтобы увидеть, нет ли в нем каких-либо нарушений последовательностей UTF-8 ... и если нет, мы называем его UTF-8. Плохая часть этого решения заключается в том, что вам придется обрабатывать символы дважды, если это UTF-8. (Если это не UTF-8, этот тест, скорее всего, определит это довольно быстро, если только файл не встречается со всеми 7-битными ASCII, в которых чтение, такое как UTF-8, не повредит).