Answers:
使用Windows随附的常规旧香草记事本打开文件。
单击“ 另存为... ” 时,它将显示文件的编码。
它看起来像这样:
无论默认选择的编码是什么,这就是您当前文件的编码。
如果是UTF-8,则可以将其更改为ANSI,然后单击“保存”以更改编码(反之亦然)。
我意识到有很多不同类型的编码,但是当我被告知导出文件为UTF-8并且需要ANSI时,这就是我所需要的。这是一次出口,所以记事本适合我。
仅供参考:根据我的理解,我认为“ Unicode ”(如记事本中所列)是UTF-16的误称。
有关记事本的“ Unicode ”选项的更多信息:Windows 7-UTF-8和Unicdoe
Windows上可以通过GnuWin32使用(Linux)命令行工具“文件”:
http://gnuwin32.sourceforge.net/packages/file.htm
如果已安装git,则它位于C:\ Program Files \ git \ usr \ bin中。
例:
C:\ Users \ SH \ Downloads \ SquareRoot>文件* _UpgradeReport_Files; 目录 调试;目录 持续时间.h; ASCII C ++程序文本,带有CRLF行终止符 ipch; 目录 main.cpp; ASCII C程序文本,带有CRLF行终止符 Precision.txt; ASCII文本,带有CRLF行终止符 释放; 目录 Speed.txt; ASCII文本,带有CRLF行终止符 SquareRoot.sdf; 数据 SquareRoot.sln; UTF-8 Unicode(带BOM)文本,带有CRLF行终止符 SquareRoot.sln.docstates.suo; PCX版本 2.5图像数据 SquareRoot.suo; CDF V2文档已损坏:无法读取摘要信息 SquareRoot.vcproj; XML文件文字 SquareRoot.vcxproj; XML文件文字 SquareRoot.vcxproj.filters; XML文件文字 SquareRoot.vcxproj.user; XML文件文字 squarerootmethods.h; ASCII C程序文本,带有CRLF行终止符 UpgradeLog.XML; XML文件文字 C:\ Users \ SH \ Downloads \ SquareRoot>文件--mime编码* _UpgradeReport_Files; 二元 调试;二元 持续时间.h; 美国 ipch; 二元 main.cpp; 美国 Precision.txt; 美国 释放; 二元 Speed.txt; 美国 SquareRoot.sdf; 二元 SquareRoot.sln; utf-8 SquareRoot.sln.docstates.suo; 二元 SquareRoot.suo; CDF V2文档已损坏:无法读取摘要信息二进制文件 SquareRoot.vcproj; 美国 SquareRoot.vcxproj; utf-8 SquareRoot.vcxproj.filters; utf-8 SquareRoot.vcxproj.user; utf-8 squarerootmethods.h; 美国 UpgradeLog.XML; 美国
我发现有用的另一个工具:https : //archive.codeplex.com/? p = encodingchecker EXE可以在这里找到
这是我通过BOM来检测Unicode文本编码系列的方法。该方法的准确性很低,因为该方法仅适用于文本文件(特别是Unicode文件),并且默认为ascii
不存在BOM的情况(像大多数文本编辑器一样,默认为UTF8
是否要匹配HTTP / Web生态系统) )。
Update 2018:我不再推荐此方法。 我建议使用@Sybren推荐的GIT或* nix工具中的file.exe,并在以后的答案中展示如何通过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,这打破了Windows的GIT auto-cr-lf,这是多年来的默认值。)
Get-FileEncoding
在我的系统上似乎不存在。它是自定义cmdlet吗?
Get-FileEncoding
。我什至从python和nodejs回顾了punycode,但是这个小版本的使用率是80/20(更像是99/1)。如果您要托管其他人的文件,建议您使用file
Syben的答案中的命令(stackoverflow.com/a/34766140/195755)或其他具有生产质量的Unicode解码器。
default
编码(如果没有BOM)。对于XML,JSON和JavaScript,默认值为UTF8,但是您的使用情况可能会有所不同。
我写了#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 *默认隐藏的OS CLI命令。
file
用作file.exe的别名,而不是file.exe
¯\ _(ツ)_ /
dir | where Size -lt 10000
vs where.exe git
。
where.exe
来区别于where
PS,后者是的内置别名Where-Object
。示例:where.exe git*
vs ls . | where Size -lt 10000
file.exe
vs .NET静态类使用相同的模式,在检测编码的同一脚本中可能需要使用此模式。范例: [File]::SetCreationTime("readme.md", [DateTime]::Now)
。
您可以使用名为Encoding Recognizer的免费实用程序(需要java)。您可以在http://mindprod.com/products2.html#ENCODINGRECOGNISER上找到它
与上面用记事本列出的解决方案类似,如果使用的话,也可以在Visual Studio中打开文件。在Visual Studio中,可以选择“文件>高级保存选项...”。
“编码:”组合框将具体告诉您文件当前正在使用哪种编码。与Notepad相比,它列出的文本编码要多得多,因此在处理来自世界各地的各种文件以及其他文件时很有用。
就像记事本一样,您也可以从此处的选项列表中更改编码,然后在单击“确定”后保存文件。您还可以通过“另存为”对话框中的“使用编码保存...”选项来选择所需的编码(通过单击“保存”按钮旁边的箭头)。
一些用于可靠的ascii,bom和utf8检测的C代码:https : //unicodebook.readthedocs.io/guess_encoding.html
只有使用BOM的ASCII,UTF-8和编码(带有BOM的UTF-7,带有BOM的UTF-8,UTF-16和UTF-32)才具有可靠的算法来获取文档的编码。对于所有其他编码,您必须信任基于统计信息的启发式方法。
编辑:
C#答案的Powershell版本来自: 查找任何文件的Encoding的有效方法。仅适用于签名(碎片)。
# 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