在Windows中获取文件的编码

时间:2010-09-14 15:28:14

标签: windows encoding

这不是一个真正的编程问题,是否有命令行或Windows工具(Windows 7)来获取文本文件的当前编码?当然我可以写一个小C#应用程序,但我想知道是否有内置的东西?

14 个答案:

答案 0 :(得分:178)

使用Windows附带的普通旧香草记事本打开文件 当您点击" 另存为... "时,它会显示文件的编码。

它看起来像这样: enter image description here

无论默认选择的编码是什么,这都是您当前编码的文件。
如果是UTF-8,您可以将其更改为ANSI并单击保存以更改编码(反之亦然)。

我意识到有许多不同类型的编码,但当我被告知我们的导出文件是UTF-8并且它们需要ANSI时,这就是我所需要的。这是一次性出口,所以记事本适合我。

仅供参考:根据我的理解,我认为" Unicode " (如记事本中所列)是UTF-16的用词不当 更多关于记事本" Unicode "选项:Windows 7 - UTF-8 and Unicdoe

答案 1 :(得分:50)

Windows上通过GnuWin32提供(Linux)命令行工具'文件':

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

答案 2 :(得分:46)

如果你有" git"或者" Cygwin"在Windows机器上,然后转到文件所在的文件夹并执行命令:

file *

这将为您提供该文件夹中所有文件的编码详细信息。

答案 3 :(得分:21)

我觉得有用的另一个工具:https://archive.codeplex.com/?p=encodingchecker 可以找到EXE here

答案 4 :(得分:16)

以下是我如何通过BOM检测Unicode系列文本编码。此方法的准确性很低,因为此方法仅适用于文本文件(特别是Unicode文件),并且在没有BOM时默认为ascii(与大多数文本编辑器一样,默认为UTF8如果你想匹配HTTP / web生态系统)。

更新2018 我不再推荐此方法。我建议使用来自GIT的file.exe或@Sybren推荐的* nix工具,以及{{3} }。

# 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

建议:如果dirlsGet-ChildItem仅检查已知文本文件,并且您只查找"糟糕的编码"来自已知的工具列表。 (即SQL Management Studio默认为UTF16,它破坏了Windows的GIT auto-cr-lf,这是多年来的默认设置。)

答案 5 :(得分:4)

我写了#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个人资料。我建议您从我的开始:https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 并将其保存到~\Documents\WindowsPowerShell。在没有git的计算机上使用它是安全的,但是在找不到git时会写警告。

命令中的 .exe 也是我如何使用PowerShell的C:\WINDOWS\system32\where.exe;以及默认情况下隐藏的许多其他OS CLI命令"通过powershell,*耸肩*。

答案 6 :(得分:3)

您可以使用名为Encoding Recognizer的免费实用程序(需要java)。您可以在http://mindprod.com/products2.html#ENCODINGRECOGNISER

找到它

答案 7 :(得分:3)

一个简单的解决方案可能是在Firefox中打开文件。

  1. 将文件拖放到firefox
  2. 右键单击页面
  3. 选择“查看页面信息”

,文本编码将出现在“页面信息”窗口中。

enter image description here

注意:如果文件不是txt格式,只需将其重命名为txt,然后重试。

P.S。有关更多信息,请参见this文章。

答案 8 :(得分:2)

与上面使用记事本列出的解决方案类似,如果您正在使用它,也可以在Visual Studio中打开该文件。在Visual Studio中,您可以选择“文件>高级保存选项...”

“编码:”组合框将具体告诉您当前正在为该文件使用哪种编码。它有比Notepad更多的文本编码,因此在处理来自世界各地的各种文件以及其他任何文件时都很有用。

就像记事本一样,您也可以从那里的选项列表中更改编码,然后在点击“确定”后保存文件。您还可以通过“另存为”对话框中的“使用编码保存...”选项选择所需的编码(通过单击“保存”按钮旁边的箭头)。

答案 9 :(得分:2)

安装git(在Windows上,必须使用git bash控制台)。类型:

file *   

用于当前目录中的所有文件,或

file */*   

用于所有子目录中的文件

答案 10 :(得分:1)

正在寻找 Node.js/npm 解决方案?试试encoding-checker

npm install -g encoding-checker

用法

Usage: encoding-checker [-p pattern] [-i encoding] [-v]
 
Options:
  --help                 Show help                                     [boolean]
  --version              Show version number                           [boolean]
  --pattern, -p, -d                                               [default: "*"]
  --ignore-encoding, -i                                            [default: ""]
  --verbose, -v                                                 [default: false]

示例

获取当前目录下所有文件的编码:

encoding-checker

返回当前目录中所有md文件的编码:

encoding-checker -p "*.md"

获取当前目录及其子文件夹中所有文件的编码(对于大文件夹需要相当长的时间;似乎没有响应):

encoding-checker -p "**"

有关更多示例,请参阅 npm docu 或官方 repository

答案 11 :(得分:0)

我发现这样做的唯一方法是VIM或Notepad ++。

答案 12 :(得分:0)

此处提供了一些C语言代码,可进行可靠的ascii,bom和utf8检测:https://unicodebook.readthedocs.io/guess_encoding.html

  

仅使用BOM表的ASCII,UTF-8和编码(UTF-7和BOM表,UTF-8和BOM表,       UTF-16和UTF-32)具有可靠的算法来获取文档的编码。       对于所有其他编码,您必须信任基于统计信息的启发式方法。

编辑:

来自Effective way to find any file's Encoding的C#答案的Powershell版本。仅适用于签名(碎片)。

imageUrl

答案 13 :(得分:0)

EncodingChecker

文件编码检查器是一种GUI工具,可让您验证一个或多个文件的文本编码。该工具可以显示所有选定文件的编码,或仅显示没有指定编码的文件。

文件编码检查器需要.NET 4或更高版本才能运行。