Какой лучший способ идентифицировать текстовые файлы в кодировке Unicode в Windows?

Я работаю над кодовой базой, в которой некоторые файлы в кодировке unicode разбросаны по всему сайту в результате того, что несколько членов команды работают с разными редакторами (и настройками по умолчанию). Я хотел бы очистить нашу базу кода, найдя все кодированные в Юникоде файлы и преобразовывая их обратно в кодировку ANSI.

Любые мысли о том, как выполнить "поиск" части этой задачи, будут по-настоящему оценены.

Ответ 1

См. "Как определить кодировку символов текстового файла?" или "Как надежно угадать кодировку [...]?"

  • UTF-8 может быть обнаружен с проверкой. Вы также можете найти спецификацию EF BB BF, но не полагайтесь на нее.
  • UTF-16 может быть обнаружен путем поиска спецификации.
  • UTF-32 может быть обнаружен путем проверки или спецификацией.
  • В противном случае используйте кодовую страницу ANSI.

Наша кодовая база не включает никаких не-ASCII-символы. Я попробую grep для спецификации в файлах в нашей кодовой базе. Спасибо за разъяснение.

Хорошо, что делает вещи намного проще. UTF-8 без символов без ASCII - ASCII.

Ответ 2

Юникод - это стандарт, это не кодировка. Существует множество кодировок, которые реализуют Unicode, включая UTF-8, UTF-16, UCS-2 и другие. Перевод любого из этих кодировок в ASCII полностью зависит от того, какую кодировку используют ваши "разные редакторы".

Некоторые редакторы вставляют байтовые байты спецификаций в начале файлов Unicode. Если ваши редакторы это делают, вы можете использовать их для обнаружения кодировки.

ANSI - это орган стандартов, который опубликовал несколько кодировок для цифровых символов. Кодировка "ANSI", используемая MS DOS и поддерживаемая в Windows, фактически является CP-1252, а не стандартом ANSI.

Использует ли ваша кодовая база не-ASCII-символы? Возможно, у вас лучше совместимость с использованием кодировки Unicode, а не с ANSI или CP-1252.

Ответ 3

Если вы ищете программное решение, IsTextUnicode() может быть вариантом.

Ответ 4

На самом деле, если вы хотите узнать в Windows, если файл является unicode, просто запустите findstr в файле для строки, которую вы знаете, там.

findstr/I/C: "SomeKnownString" file.txt

Он вернется пустым. Тогда, конечно, запустите findstr на букву или цифре, которую вы знаете, в файле:

FindStr/I/C: "P" file.txt

Вероятно, вы получите много случаев, и ключ в том, что они будут разнесены на части. Это знак, который является файлом unicode, а не ascii.

Надеюсь, что это поможет.

Ответ 5

Трудно сказать, но я начал бы искать спецификацию. Большинство программ Windows, которые пишут файлы Unicode, испускают спецификации.

Если эти файлы существуют в вашей кодовой базе, они, по-видимому, компилируются. Вы можете спросить себя, действительно ли вам нужно это "убирать". Если вам это нужно, я бы спросил, как цепочка инструментов, обрабатывающая эти файлы, обнаруживает их кодировку. Если вы знаете, что тогда вы сможете использовать ту же диагностику.