Получить кодировку файла в Windows
Это не вопрос программирования, есть ли командная строка или инструмент Windows (Windows 7) для получения текущей кодировки текстового файла? Конечно, я могу написать небольшое приложение С#, но я хотел знать, есть ли что-то уже встроенное?
Ответы
Ответ 1
Откройте файл, используя обычный старый ванильный блокнот, который поставляется с Windows.
Он покажет вам кодировку файла, когда вы нажмете "Сохранить как...".
Это будет выглядеть так:
Независимо от выбранной по умолчанию кодировки, это то, что ваша текущая кодировка для файла.
Если это UTF-8, вы можете изменить его на ANSI и нажать "Сохранить", чтобы изменить кодировку (или наоборот).
Я понимаю, что существует много разных типов кодирования, но это все, что мне нужно, когда мне сообщили, что наши файлы экспорта находятся в UTF-8, и они требуют ANSI. Это был разовый экспорт, поэтому Блокнот подходил для меня.
FYI: По моему мнению, я думаю, что "Unicode" (как указано в "Блокноте" ) является неправильным для UTF-16.
Подробнее здесь: "Блокнот Unicode": Windows 7 - UTF-8 и Unicdoe
Ответ 2
(Файл) инструмента командной строки (Linux) доступен в Windows через GnuWin32:
http://gnuwin32.sourceforge.net/packages/file.htm
Если у вас установлен git, он находится в C:\Program Files\git\usr\bin.
Пример:
C:\Users\SH\Downloads\SquareRoot>file *
_UpgradeReport_Files; directory
Debug; directory
duration.h; ASCII C++ program text, with CRLF line terminators
ipch; directory
main.cpp; ASCII C program text, with CRLF line terminators
Precision.txt; ASCII text, with CRLF line terminators
Release; directory
Speed.txt; ASCII text, with CRLF line terminators
SquareRoot.sdf; data
SquareRoot.sln; UTF-8 Unicode (with BOM) text, with CRLF line terminators
SquareRoot.sln.docstates.suo; PCX ver. 2.5 image data
SquareRoot.suo; CDF V2 Document, corrupt: Cannot read summary info
SquareRoot.vcproj; XML document text
SquareRoot.vcxproj; XML document text
SquareRoot.vcxproj.filters; XML document text
SquareRoot.vcxproj.user; XML document text
squarerootmethods.h; ASCII C program text, with CRLF line terminators
UpgradeLog.XML; XML document text
C:\Users\SH\Downloads\SquareRoot>file --mime-encoding *
_UpgradeReport_Files; binary
Debug; binary
duration.h; us-ascii
ipch; binary
main.cpp; us-ascii
Precision.txt; us-ascii
Release; binary
Speed.txt; us-ascii
SquareRoot.sdf; binary
SquareRoot.sln; utf-8
SquareRoot.sln.docstates.suo; binary
SquareRoot.suo; CDF V2 Document, corrupt: Cannot read summary infobinary
SquareRoot.vcproj; us-ascii
SquareRoot.vcxproj; utf-8
SquareRoot.vcxproj.filters; utf-8
SquareRoot.vcxproj.user; utf-8
squarerootmethods.h; us-ascii
UpgradeLog.XML; us-ascii
Ответ 3
Если у вас есть "git" или "Cygwin" на вашей Windows-машине, перейдите в папку, в которой находится ваш файл, и выполните команду:
file *
Это даст вам информацию о кодировке всех файлов в этой папке.
Ответ 4
Еще один инструмент, который я нашел полезным: https://archive.codeplex.com/?p=encodingchecker EXE можно найти здесь
Ответ 5
Здесь я расскажу, как определить семейство текстовых кодировок Unicode через BOM. Точность этого метода низкая, так как этот метод работает только с текстовыми файлами (в частности, с файлами Unicode), и по умолчанию используется ascii
когда нет спецификаций (как и большинство текстовых редакторов, по умолчанию будет UTF8
если вы хотите соответствовать HTTP/веб-экосистема).
Обновление 2018: я больше не рекомендую этот метод. Я рекомендую использовать file.exe из GIT или * nix tools в соответствии с рекомендациями @Sybren, и я покажу, как это сделать с помощью PowerShell, в более позднем ответе.
# from https://gist.github.com/zommarin/1480974
function Get-FileEncoding($Path) {
$bytes = [byte[]](Get-Content $Path -Encoding byte -ReadCount 4 -TotalCount 4)
if(!$bytes) { return 'utf8' }
switch -regex ('{0:x2}{1:x2}{2:x2}{3:x2}' -f $bytes[0],$bytes[1],$bytes[2],$bytes[3]) {
'^efbbbf' { return 'utf8' }
'^2b2f76' { return 'utf7' }
'^fffe' { return 'unicode' }
'^feff' { return 'bigendianunicode' }
'^0000feff' { return 'utf32' }
default { return 'ascii' }
}
}
dir ~\Documents\WindowsPowershell -File |
select Name,@{Name='Encoding';Expression={Get-FileEncoding $_.FullName}} |
ft -AutoSize
Рекомендация: это может работать достаточно хорошо, если dir
, ls
или Get-ChildItem
проверяют только известные текстовые файлы и когда вы ищете только "плохие кодировки" из известного списка инструментов. (т.е. SQL Management Studio по умолчанию использует UTF16, что нарушает GIT auto-cr-lf для Windows, который был по умолчанию в течение многих лет.)
Ответ 6
Я написал ответ № 4 (на момент написания). Но в последнее время я установил git на все мои компьютеры, поэтому теперь я использую решение @Sybren. Вот новый ответ, который делает это решение удобным с powershell (без помещения всего git/usr/bin в PATH, что для меня слишком много).
Добавьте это к profile.ps1
:
$global:gitbin = 'C:\Program Files\Git\usr\bin'
Set-Alias file.exe $gitbin\file.exe
И используется как: file.exe --mime-encoding *
. Вы должны включить .exe в команду, чтобы псевдоним PS работал.
Но если вы не настроите свой PowerShell profile.ps1, я предлагаю вам начать с моего: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0
и сохраните его в ~\Documents\WindowsPowerShell
. Безопасно использовать на компьютере без git, но выдает предупреждения, когда git не найден.
.exe в команде - это также то, как я использую C:\WINDOWS\system32\where.exe
из powershell; и многие другие команды командной строки ОС, которые "скрыты по умолчанию" от powershell, * shrug *.
Ответ 7
Вы можете использовать бесплатную утилиту под названием Encoding Recognizer (требуется Java). Вы можете найти его на http://mindprod.com/products2.html#ENCODINGRECOGNISER
Ответ 8
Подобно решению, указанному выше с помощью Notepad, вы также можете открыть файл в Visual Studio, если вы его используете. В Visual Studio вы можете выбрать "Файл > Дополнительные параметры сохранения..."
В поле "Кодировка:" будет указано, какая именно кодировка используется в настоящее время для файла. Он содержит гораздо больше текстовых кодировок, перечисленных здесь, чем "Блокнот", поэтому он полезен при работе с различными файлами со всего мира и всего остального.
Как и "Блокнот", вы также можете изменить кодировку из списка параметров, а затем сохранить файл после нажатия "ОК". Вы также можете выбрать нужную кодировку с помощью опции "Сохранить с кодировкой..." в диалоговом окне "Сохранить как" (нажав стрелку рядом с кнопкой "Сохранить" ).
Ответ 9
Вот некоторый C-код для надежного обнаружения ascii, bom's и utf8: https://unicodebook.readthedocs.io/guess_encoding.html
Только ASCII, UTF-8 и кодировки, использующие спецификацию (UTF-7 с спецификацией, UTF-8 с спецификацией, UTF-16 и UTF-32) имеют надежные алгоритмы для получения кодировки документа. Для всех остальных кодировок вы должны доверять эвристике, основанной на статистике.
EDIT:
Версия PowerShell ответа С# от: Эффективный способ найти любую кодировку файла. Работает только с подписями (бомбами).
# get-encoding.ps1
param([Parameter(ValueFromPipeline=$True)] $filename)
begin {
# set .net current directory
[Environment]::CurrentDirectory = (pwd).path
}
process {
$reader = [System.IO.StreamReader]::new($filename,
[System.Text.Encoding]::default,$true)
$peek = $reader.Peek()
$encoding = $reader.currentencoding
$reader.close()
[pscustomobject]@{Name=split-path $filename -leaf
BodyName=$encoding.BodyName
EncodingName=$encoding.EncodingName}
}
.\get-encoding chinese8.txt
Name BodyName EncodingName
---- -------- ------------
chinese8.txt utf-8 Unicode (UTF-8)
get-childitem -file | .\get-encoding
Ответ 10
Простым решением может быть открытие файла в Firefox.
- Перетащите файл в Firefox
- Щелкните правой кнопкой мыши на странице
- Выберите "Просмотр информации о странице"
и кодировка текста появится в окне "Информация о странице".
Примечание. Если файл не в формате txt, просто переименуйте его в txt и повторите попытку.
Постскриптум Для получения дополнительной информации см. эту статью.
Ответ 11
Единственным способом, который я нашел для этого, является VIM или Notepad ++.