На работе кажется, что никакая неделя никогда не проходит без какого-либо связанного с кодированием конниции, катастрофы или катастрофы. Обычно проблема возникает у программистов, которые думают, что могут надежно обработать "текстовый" файл без указания кодировки. Но вы не можете.
Итак, было решено отныне запрещать файлы из когда-либо имеющих имена, заканчивающиеся на *.txt
или *.text
. Мысль заключается в том, что эти расширения вводят в заблуждение случайного программиста в унылое самоуспокоение в отношении кодировок, и это приводит к неправильному обращению. Было бы лучше, если бы не было
вообще, потому что по крайней мере тогда вы знаете, что не знаете, что у вас есть.
Однако, мы arent goint, чтобы зайти так далеко. Вместо этого вы должны будете использовать имя файла, которое заканчивается в кодировке. Например, для текстовых файлов это будет нечто вроде README.ascii
, README.latin1
, README.utf8
и т.д.
Для файлов, требующих определенного расширения, если вы можете указать кодировку внутри самого файла, например, в Perl или Python, тогда вы сделаете это. Для таких файлов, как источник Java, где такой объект не существует внутри файла, вы помещаете кодировку перед расширением, например SomeClass-utf8.java
.
Для вывода UTF-8 должен быть сильно.
Но для ввода нам нужно выяснить, как обращаться с тысячами файлов в нашей кодовой базе с именем *.txt
. Мы хотим переименовать их все в наш новый стандарт. Но мы, возможно, не заметим их всех. Поэтому нам нужна библиотека или программа, которая действительно работает.
Это по-разному в ASCII, ISO-8859-1, UTF-8, Microsoft CP1252 или Apple MacRoman. Хотя мы знаем, что мы можем сказать, что что-то есть ASCII, и мы хорошо знаем, что, возможно, что-то вроде UTF-8, были в тупике по поводу 8-битных кодировок. Поскольку они работали в смешанной среде Unix (Solaris, Linux, Darwin), причем большинство настольных компьютеров были Mac, у нас есть довольно много раздражающих файлов MacRoman. И это особенно проблема.
В течение некоторого времени Ive искал способ программно определить, какой из
- ASCII
- ISO-8859-1
- кодировка CP1252
- MacRoman
- UTF-8
находится файл, и я не нашел программу или библиотеку, которая может надежно различать три разных 8-битных кодировки. У нас, вероятно, есть более тысячи файлов MacRoman, поэтому любой детекторы кодировки, которые мы используем, должны быть в состоянии вынюхать их. Ничто из того, что я смотрел, не может справиться с трюком. У меня были большие надежды на библиотеку детекторов charset ICU, но она не может работать с MacRoman. Ive также посмотрел на модули, чтобы делать то же самое в Perl и Python, но снова и снова его всегда одна и та же история: нет поддержки для обнаружения MacRoman.
Поэтому я ищу существующую библиотеку или программу, которая надежно определяет, какой из этих пяти кодировок находится в файле и, желательно, больше. В частности, он должен различать три 3-битных кодирования Ive, обозначенных , особенно MacRoman. Файлы содержат более 99% текста на английском языке; есть несколько на других языках, но не так много.
Если его библиотечный код, нашим языковым предпочтением является его наличие в Perl, C, Java или Python и в этом порядке. Если это просто программа, тогда нам действительно не важно, какой язык ее до тех пор, пока он поставляется в полном исходном коде, работает в Unix и полностью не обременен.
У кого-нибудь еще была проблема с zillion устаревшими текстовыми файлами, случайно закодированными? Если да, то как вы пытались ее решить и насколько вы были успешны? Это самый важный аспект моего вопроса, но мне также интересно, думаете ли вы, что поощряющие программисты называть (или переименовывать) свои файлы с фактической кодировкой этих файлов, помогут нам избежать этой проблемы в будущем. Кто-нибудь когда-либо пытался обеспечить это на институциональной основе, и если да, то это было успешным или нет, и почему?
И да, я полностью понимаю, почему никто не может гарантировать определенный ответ, учитывая характер проблемы. Это особенно характерно для небольших файлов, в которых у вас недостаточно данных для продолжения. К счастью, наши файлы редко бывают маленькими. Помимо случайного файла README
, большинство из них находятся в диапазоне от 50 к до 250 тыс., А многие из них больше. Все, что может быть больше, чем на несколько килограммов, гарантировано на английском языке.
Проблемная область - это биомедицинский интеллектуальный анализ текста, поэтому мы иногда имеем дело с обширными и чрезвычайно крупными корпорациями, такими как весь репозиторий PubMedCentrals Open Access. Довольно огромный файл - BioThesaurus 6.0, 5,7 гигабайта. Этот файл особенно раздражает, потому что это почти все UTF-8. Тем не менее, некоторые numbskull пошли и застряли несколько строк в нем, которые, по-моему, в некотором 8-битном кодировании - Microsoft CP1252. Это займет довольно много времени, прежде чем вы отправитесь в путешествие.: (