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


当前回答

寻找一个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文档或官方存储库。

其他回答

这里有一些可靠的ascii、bom和utf8检测的C代码:https://unicodebook.readthedocs.io/guess_encoding.html

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

编辑:

一个powershell版本的c#答案来自:找到任何文件编码的有效方法。只适用于签名(炸弹)。

# get-encoding.ps1
param([Parameter(ValueFromPipeline=$True)] $filename)    
begin {
  # set .net current directoy                                                                                                   
  [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

EncodingChecker

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

文件编码检查程序需要。net 4或更高版本才能运行。

寻找一个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文档或官方存储库。

我发现做到这一点的唯一方法是VIM或notepad++。

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

将文件拖放到firefox中 按Ctrl+I打开页面信息

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

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

附:欲了解更多信息,请参阅这篇文章。