web-dev-qa-db-ja.com

Windowsでファイルのエンコードを取得する

これは実際にはプログラミングの問題ではありません。テキストファイルの現在のエンコードを取得するためのコマンドラインまたはWindowsツール(Windows 7)はありますか。確かに私は小さなC#のアプリを書くことができますが、私はすでに組み込まれているものがあるかどうかを知りたかったのですか?

159
TheWebGuy

Windowsに付属の通常の古いバニラメモ帳を使ってファイルを開きます。
[名前を付けて保存...]をクリックすると、ファイルのエンコードが表示されます。
これは次のようになります。 enter image description here

デフォルトで選択されているエンコーディングが何であれ、それが現在のファイルのエンコーディングです。
UTF-8の場合は、ANSIに変更して[保存]をクリックしてエンコードを変更できます(またはその逆)。

さまざまな種類のエンコーディングがあることを認識していますが、エクスポートファイルがUTF-8でありANSIが必要であると知らされたときに必要なのはこれだけでした。それは1回限りの輸出でした、それでメモ帳は私の代わりになります。

FYI:私の理解から私は "Unicode"(メモ帳にリストされているように)はUTF-16の誤称であると思います。
メモ帳の "Unicode"オプションの詳細: Windows 7 - UTF-8とUnicdoe

178
MikeTeeVee

(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 
50
Sybren

Windowsマシンに "git"または "Cygwin"がある場合は、ファイルが存在するフォルダに移動して次のコマンドを実行します。

file *

これにより、そのフォルダ内のすべてのファイルのエンコードの詳細がわかります。

46
George Ninan

私が便利だと思った別のツール: https://archive.codeplex.com/?p=encodingchecker EXEが見つかります ここ

21
user961954

これが、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

推奨事項:dirls、またはGet-ChildItemが既知のテキストファイルのみをチェックし、既知のツールの一覧から「不適切なエンコーディング」のみを探している場合は、これは適切に機能します。 (つまり、SQL Management StudioのデフォルトはUTF16で、これはWindowsのGIT auto-cr-lfを破り、これが長年のデフォルトでした。)

16
yzorg

私は(執筆時点で)#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 *。

5
yzorg

Encoding Recognizerと呼ばれる無料のユーティリティを使うことができます(Javaが必要です)。あなたはそれを見つけることができます http://mindprod.com/products2.html#ENCODINGRECOGNISER

3
Ville

メモ帳を使用した上記の解決方法と同様に、使用している場合は、Visual Studioでファイルを開くこともできます。 Visual Studioでは、[ファイル]> [高度な保存オプション...]を選択できます。

"Encoding:"コンボボックスは、現在どのエンコーディングがファイルに使用されているかを具体的に教えてくれます。そこにはメモ帳よりもはるかに多くのテキストエンコーディングがリストされているので、世界中のさまざまなファイルやその他のものを扱うときに役立ちます。

メモ帳と同じように、そこにあるオプションのリストからエンコーディングを変更し、 "OK"を押した後にファイルを保存することもできます。 [名前を付けて保存]ダイアログの[エンコードを付けて保存...]オプションで([保存]ボタンの横にある矢印をクリックして)必要なエンコードを選択することもできます。

2
JaykeBird

簡単な解決策は、Firefoxでファイルを開くことです。

  1. ファイルをFirefoxにドラッグアンドドロップします
  2. ページを右クリック
  3. [ページ情報を表示]を選択します

テキストエンコードが[ページ情報]ウィンドウに表示されます。

enter image description here

注:ファイルがtxt形式でない場合は、ファイル名をtxtに変更してもう一度やり直してください。

追伸詳細については、 this の記事を参照してください。

0
Just Shadow

私がこれを行うことを発見した唯一の方法はVIMまたはNotepad ++です。

0
Todd Partridge

信頼性の高い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)
0
js2010