これは実際にはプログラミングの問題ではありません。テキストファイルの現在のエンコードを取得するためのコマンドラインまたはWindowsツール(Windows 7)はありますか。確かに私は小さなC#のアプリを書くことができますが、私はすでに組み込まれているものがあるかどうかを知りたかったのですか?
Windowsに付属の通常の古いバニラメモ帳を使ってファイルを開きます。
[名前を付けて保存...]をクリックすると、ファイルのエンコードが表示されます。
これは次のようになります。
デフォルトで選択されているエンコーディングが何であれ、それが現在のファイルのエンコーディングです。
UTF-8の場合は、ANSIに変更して[保存]をクリックしてエンコードを変更できます(またはその逆)。
さまざまな種類のエンコーディングがあることを認識していますが、エクスポートファイルがUTF-8でありANSIが必要であると知らされたときに必要なのはこれだけでした。それは1回限りの輸出でした、それでメモ帳は私の代わりになります。
FYI:私の理解から私は "Unicode"(メモ帳にリストされているように)はUTF-16の誤称であると思います。
メモ帳の "Unicode"オプションの詳細: Windows 7 - UTF-8とUnicdoe
(Linux)コマンドラインツール 'file'はWindowsのGnuWin32から入手できます。
http://gnuwin32.sourceforge.net/packages/file.htm
Gitがインストールされている場合は、C:\ Program Files\git\usr\binにあります。
例:
C:\ Users\SH\Downloads\SquareRoot>ファイル* _UpgradeReport_Files;ディレクトリ デバッグ。ディレクトリ duration.h。 ASCII C++プログラムテキスト、CRLF行ターミネータ付き ipch;ディレクトリ main.cpp; ASCII Cプログラムテキスト、CRLFラインターミネータ付き Precision.txt; ASCIIテキスト、CRLFラインターミネータ付き リリース。ディレクトリ Speed.txt。 ASCII text、CRLFラインターミネータ付き SquareRoot.sdf; data SquareRoot.sln; UTF-8 Unicode(BOMあり)テキスト、CRLF行終了記号付き SquareRoot.sln.docstates.suo; PCX ver。 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> file - MIMEエンコード* _UpgradeReport_Files;バイナリ デバッグ。バイナリ duration.h。 us-ascii ipch。バイナリ main.cpp; us-ascii Precision.txt; us-ascii リリース。バイナリ Speed.txt。 us-ascii SquareRoot.sdf;バイナリ SquareRoot.sln; utf-8 SquareRoot.sln.docstates.suo;バイナリ SquareRoot.suo; CDF V2文書、破損しています:要約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
Windowsマシンに "git"または "Cygwin"がある場合は、ファイルが存在するフォルダに移動して次のコマンドを実行します。
file *
これにより、そのフォルダ内のすべてのファイルのエンコードの詳細がわかります。
私が便利だと思った別のツール: https://archive.codeplex.com/?p=encodingchecker EXEが見つかります ここ
これが、BOMを介してUnicodeファミリーのテキストエンコーディングを検出する方法です。この方法はテキストファイル(特にUnicodeファイル)に対してのみ有効であり、BOMが存在しない場合はデフォルトでascii
になります(ほとんどのテキストエディタのように、HTTPと一致させたい場合のデフォルトはUTF8
になります)。ウェブエコシステム).
アップデート2018:この方法は推奨しません。GITのfile.exeまたは*の使用をお勧めします。 @Sybrenで推奨されているnixツール、および 後の回答で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を破り、これが長年のデフォルトでした。)
私は(執筆時点で)#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 *
のように使われます。 PSエイリアスが機能するには、コマンドに.exeを含める必要がありますを使用してください。
しかし、あなたがあなたのPowerShell profile.ps1をカスタマイズしないならば、私はあなたが私から始めることを勧めます: https://Gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be そしてそれを~\Documents\WindowsPowerShell
に保存します。 gitがなくてもコンピュータ上で使用するのは安全ですが、gitが見つからない場合は警告が表示されます。
コマンドの。exeは、PowerShellのC:\WINDOWS\system32\where.exe
の使い方でもあります。 PowerShellでは「デフォルトで隠されている」他の多くのOS CLIコマンド、* shrug *。
Encoding Recognizerと呼ばれる無料のユーティリティを使うことができます(Javaが必要です)。あなたはそれを見つけることができます http://mindprod.com/products2.html#ENCODINGRECOGNISER
メモ帳を使用した上記の解決方法と同様に、使用している場合は、Visual Studioでファイルを開くこともできます。 Visual Studioでは、[ファイル]> [高度な保存オプション...]を選択できます。
"Encoding:"コンボボックスは、現在どのエンコーディングがファイルに使用されているかを具体的に教えてくれます。そこにはメモ帳よりもはるかに多くのテキストエンコーディングがリストされているので、世界中のさまざまなファイルやその他のものを扱うときに役立ちます。
メモ帳と同じように、そこにあるオプションのリストからエンコーディングを変更し、 "OK"を押した後にファイルを保存することもできます。 [名前を付けて保存]ダイアログの[エンコードを付けて保存...]オプションで([保存]ボタンの横にある矢印をクリックして)必要なエンコードを選択することもできます。
簡単な解決策は、Firefoxでファイルを開くことです。
テキストエンコードが[ページ情報]ウィンドウに表示されます。
注:ファイルがtxt形式でない場合は、ファイル名をtxtに変更してもう一度やり直してください。
追伸詳細については、 this の記事を参照してください。
私がこれを行うことを発見した唯一の方法はVIMまたはNotepad ++です。
信頼性の高いASCII、BOM、およびUTF-8検出のためのCコードをいくつかここに示します。 https://unicodebook.readthedocs.io/guess_encoding.html
ASCII、UTF-8、およびBOMを使用したエンコード(BOMを使用したUTF-7、BOMを使用したUTF-8、UTF-16、およびUTF-32)のみが、文書のエンコードを取得するための信頼できるアルゴリズムを持ちます。他のすべてのエンコーディングでは、統計に基づいてヒューリスティックを信頼する必要があります。
編集:
C#のPowerShell版は以下から答えます。 あらゆるファイルのEncoding を見つけるための効果的な方法。署名(boms)だけで動作します。
# encoding.ps1
param([Parameter(ValueFromPipeline=$True)] $filename)
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}
}
PS C:\> .\encoding.ps1 chinese8.txt
Name BodyName EncodingName
---- -------- ------------
chinese8.txt utf-8 Unicode (UTF-8)