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


当前回答

我写了第4个答案(在写作的时候)。但最近我在所有电脑上都安装了git,所以现在我使用@Sybren的解决方案。这是一个新的答案,使解决方案方便从powershell(没有把所有的git/usr/bin在PATH,这是太多的混乱对我来说)。

将此添加到您的配置文件中。

$global:gitbin = 'C:\Program Files\Git\usr\bin'
Set-Alias file.exe $gitbin\file.exe

并使用类似:file.exe——mime-encoding *。必须在命令中包含.exe,才能使PS别名正常工作。

但如果您不自定义PowerShell配置文件。ps1我建议你从我的开始:https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 并保存到~\Documents\WindowsPowerShell。在没有git的计算机上使用它是安全的,但如果找不到git,则会编写警告。

命令中的.exe也是我如何使用powershell中的C:\WINDOWS\system32\where.exe;和许多其他操作系统CLI命令是“默认隐藏”的powershell, *耸肩*。

其他回答

这里有一些可靠的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

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

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

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

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

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

我写了第4个答案(在写作的时候)。但最近我在所有电脑上都安装了git,所以现在我使用@Sybren的解决方案。这是一个新的答案,使解决方案方便从powershell(没有把所有的git/usr/bin在PATH,这是太多的混乱对我来说)。

将此添加到您的配置文件中。

$global:gitbin = 'C:\Program Files\Git\usr\bin'
Set-Alias file.exe $gitbin\file.exe

并使用类似:file.exe——mime-encoding *。必须在命令中包含.exe,才能使PS别名正常工作。

但如果您不自定义PowerShell配置文件。ps1我建议你从我的开始:https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0 并保存到~\Documents\WindowsPowerShell。在没有git的计算机上使用它是安全的,但如果找不到git,则会编写警告。

命令中的.exe也是我如何使用powershell中的C:\WINDOWS\system32\where.exe;和许多其他操作系统CLI命令是“默认隐藏”的powershell, *耸肩*。

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

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

file --mime-encoding *   

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

file --mime-encoding */*   

对于所有子目录中的文件