Найти все файлы в кодировке UTF-16 в Windows

6

Существует ли для Windows инструмент (командная строка, графический интерфейс, скрипт и т. Д.), Который может создать каталог и идентифицировать все файлы, закодированные как UTF-16?

Марк Ричман
источник
Вообще говоря, нет способа автоматически и без ошибок обнаружить кодировку текстового файла. Сказав это: если содержимое на самом деле является просто символами из диапазона ASCII (или в основном из этого диапазона), то проверка файлов, в которых находится каждый второй байт, является 0хорошим началом.
Йоахим Зауэр
1
@Joachim: я думаю, что для достаточно больших файлов ошибки обнаружения должны быть незначительными. Нечто вроде «Буш скрыл факты» становится экспоненциально невозможным, когда количество персонажей достаточно велико.
Филипп
1
@ Филипп: я даже не знал об этом конкретном случае. Спасибо! Но количество ошибок ожидать зависит много от фактического содержания файлов: если это все в основном английский текст ASCII, то скорость обнаружения будет очень хорошо (идеально или почти идеально, я думаю). Но если у вас есть кодированные в UTF-16 тексты на китайском, арабском, суахили и индусском языке в дополнение к множеству двоичных данных, то это будет намного хуже.
Йоахим Зауэр
2
@ Йоахим: Согласен. Исходя из моего опыта, файлы UTF-16 без спецификации часто генерируются системными инструментами Windows (сценариями установщика, может быть, редактором реестра), поскольку такой файл, по сути, является дампом памяти строки UTF-16. Такие файлы часто содержат много разметки ASCII, что упрощает их идентификацию. И наоборот (решить, является ли файл UTF-16 действительно файлом UTF-16), конечно, гораздо сложнее. Возможно, можно было бы проверить, принадлежат ли большие части файла одному сценарию, встречаются ли последовательности CRLF в UTF-16 и т. Д.
Филипп

Ответы:

2

Этот инструмент позволяет определить тип кодировки файла с учетом стандартной информации, такой как шаблон поиска и путь к файлу:

Проверка кодировки файлов

File Encoding Checker - это инструмент с графическим интерфейсом, который позволяет проверять кодировку текста одного или нескольких файлов. Инструмент может отображать кодировку для всех выбранных файлов или только для файлов, которые не имеют указанных кодировок.

введите описание изображения здесь

Я не использовал это сам, так что вы можете проверить это.

Без шансов
источник
1

Медленным способом было бы взять любую утилиту преобразования и запустить ее для всех файлов в каталоге. Эти файлы, успешно преобразованные из UTF-16 в другой формат, скорее всего, вам нужны. Для этой задачи вы можете выбрать доступный инструмент, такой как Конвертер набора символов .

Или вы можете написать такой инструмент, используя фрагмент кода C ++ из этой статьи. Преобразование между Unicode UTF-16 и UTF-8 в C ++ / Win32 . Пользовательский инструмент может быть оптимизирован, чтобы избавиться от первой ошибки преобразования и не сохранять преобразованный буфер в файл.


источник
1

Для файлов UTF-16 с спецификацией - команда PowerShell

gci . -Include *.txt -Recurse | `
% { $c = gc $_.FullName -TotalCount 2 -Encoding Byte; `
    if ( $c.Length -gt 0 -and `
         (($c[0] -eq 255 -and $c[1] -eq 254) -or `
         ($c[0] -eq 254 -and $c[1] -eq 255)) `
        ) {$_.FullName} `
  }
Дмитрий Соколов
источник
0

Нетрудно сделать один, прочитать первые два байта каждого файла и посмотреть, установлены ли они в FF FE (окна) соответственно.

pcunite
источник