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


206

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


12
タイトルは、Windowsでのファイルのエンコーディングを推測してください。事前にわからない場合は、確実に推測することはできません。
Tom Blodget 2016年

回答:


222

Windowsに付属する通常の古いメモ帳を使用してファイルを開きます。
名前を付けて保存」をクリックすると、ファイルのエンコーディングが表示されます。
次のようになります。 ここに画像の説明を入力してください

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

エンコードにはさまざまな種類があることに気づきましたが、エクスポートファイルがUTF-8であり、ANSIが必要であると通知されたとき、これだけで十分でした。これは1回限りのエクスポートだったので、メモ帳は私にぴったりです。

参考:私の理解から、「Unicode」(メモ帳にリストされている)はUTF-16の誤称だと思います。
メモ帳の「Unicode」オプションの詳細:Windows 7-UTF-8およびUnicdoe


1
@アレックス、私はWin-8を使用していません。グーグル検索を実行して、私はこのリンクを見つけました:Win-8 Notepad。私はあなたがそれを見つけることを願っています。
MikeTeeVee 2015

1
ありがとうございますが、Windows 8.1にはメモ帳というアプリはありません。検索にメモ帳を入力すると、「エディタ」が表示されます。そして、これにはその魅力的なドロップダウンもメニューもありません
Alex

4
この方法は、メモ帳を開くには大きすぎるファイルに対しては機能しません。そして、その制限はNotepad ++のような他のエディターよりもはるかに速く到達します。私のWindows 8.1にはメモ帳があります。おそらく%windir%\ system32 \ notepad.exeを見てください。
Fabian Kessler

3
メモ帳は、Windows 8およびWindows 10に存在する
アラン・B

6
メモ帳は、少なくともWindows 3以降のすべてのバージョンのWindowsにインストールされています。
ジャン=フランソワ・Larvoire

64

(Linux)コマンドラインツール「ファイル」は、GnuWin32を介してWindowsで使用できます。

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テキスト、CRLF行ターミネーター付き
    SquareRoot.sdf; データ
    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-encoding *
    _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ドキュメント、破損:サマリー情報バイナリを読み取れません
    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

1
あなたはおそらくそれのためにgit 2.xを必要とすることに注意してください、私はgit 1.9.5ではそれを持っていません
-jakub.g

私のファイルでは、 "binary" :(
barbara.post

1
基本的な操作のためにコマンドラインに戻る必要があるとは信じられないほど、これは2017年ですが、問題ないようです。
トッドパートリッジ2017

1
他の答えが言うようにcygwinでfileコマンドを使用することもできます。Windows用のすべてのPOSIXツールセットが必要です。file
palswim

git for windowsをインストールした場合は、GIT BASH(bashエミュレーター)が含まれ、これに 'file'コマンドが含まれます。使用しただけで機能します。それは次の回答でも述べられています...
Amir Katz

61

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

file *

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


回答に追加して、特定のファイルのみに関心がある場合は、grepコマンドを使用して、file *コマンドの結果をフィルタリングできます
ebram khalil

ファイルコマンドを盲目的に実行する代わりに、この質問に答える完全なコマンドfile --mime-encodingは、ファイルのエンコードを取得することです
smac89

23

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


4
複数のファイルを分析するのに非常に役立つ
Eric Bonnot 2014年

1
非常に大きなファイルでも(予想通り)すぐに回答します。
Fabian Kessler、2016

1
現在のWindows 10で動作します
barbara.post 2017

2
そのページのexeファイルがどこにあるのか理解できません。リンクは古くなっていますか?
クリストフ

1
@MarkDeven応答にexeへのパスを追加しました
user961954

17

これが、BOMを介してテキストエンコーディングのUnicodeファミリを検出する方法です。このメソッドはテキストファイル(特にUnicodeファイル)でのみ機能するため、このメソッドの精度は低く、デフォルトでasciiはBOMが存在しない場合に設定されます(ほとんどのテキストエディターと同様に、デフォルトはUTF8HTTP / Webエコシステムに一致させる場合です) )。

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、適切に機能します。(つまり、SQL Management StudioのデフォルトはUTF16であり、長年のデフォルトであったWindowsのGIT auto-cr-lfに違反していました。)lsGet-ChildItem


Get-FileEncoding私のシステムには存在しないようです。カスタムコマンドレットですか?
Xavier Poinas 2015年

poshcodeには多くのバリエーションがありますGet-FileEncoding。私はpythonとnodejsからのpunycodeもレビューしましたが、この小さなバージョンは私の使用法で80/20に達します(99/1に似ています)。他の人のファイルをホストしている場合はfile、Sybenの回答(stackoverflow.com/a/34766140/195755)のコマンドまたは別の本番品質のUnicodeデコーダーを使用することをお勧めします。
yzorg

この方法は、BOMが存在する場合にのみ機能することを追加する必要があります...常にそうとは限りません
Yepeekai

@Yepeekai最後の行はdefaultエンコーディングです(BOMがない場合)。XML、JSON、JavaScriptの場合、デフォルトはUTF8ですが、距離は異なる場合があります。
yzorg 2018

@yzorg:しかし、それはそれを行うための頭の痛い方法です。あなたはただユーザーに嘘をついています。少なくともほとんどのパーサーは知識に基づいた推測を行います。推測できない場合は、エラーをスローし、コードを使用するためにBOMが必要であることを伝えてください(そして、既存の多くのスマートツールを使用します)。
エドS.

7

#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/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0を し、それを保存します~\Documents\WindowsPowerShell。gitがインストールされていないコンピュータで使用しても安全ですが、gitが見つからない場合は警告が表示されます。

コマンドの.exeは、C:\WINDOWS\system32\where.exePowershellからの使用方法でもあります。そして、Powershell、* shrug *によって「デフォルトで非表示」になっている他の多くのOS CLIコマンド。


1
またはfile、file file.exe\ _(ツ)_ /¯の代わりにfile.exeのエイリアスとして使用することもできます
ferrell_io

TL @ferrell_io; DR:PSは、.NETと.NETに基づいていますが、ファイルの静的なクラスがあり、PSは十分に私が勝つEXEからPSを区別するために.exeファイルを使用することを共通のEXEでのオーバーロードを混乱している:dir | where Size -lt 10000where.exe git
yzorg

@ferrell_ioをPS where.exeと区別するために使用します。PSはのwhere組み込みエイリアスですWhere-Object。例:where.exe git* vs ls . | where Size -lt 10000
yzorg

@ferrell_ioしたがってfile.exe、.NET静的クラスと同じパターンを使用します。これは、エンコーディングを検出している同じスクリプトで必要になる場合があります。例: [File]::SetCreationTime("readme.md", [DateTime]::Now)
yzorg

6

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

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

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

ここに画像の説明を入力してください

注: ファイルがtxt形式でない場合は、ファイル名をtxtに変更して、再試行してください。

PS詳細については、この記事を参照しください。


4

gitをインストールします(Windowsではgit bashコンソールを使用する必要があります)。タイプ:

file *   

現在のディレクトリ内のすべてのファイル、または

file */*   

すべてのサブディレクトリのファイル



2

上記のメモ帳を使用したソリューションと同様に、使用している場合は、Visual Studioでファイルを開くこともできます。Visual Studioでは、[ファイル]> [保存オプションの詳細...]を選択できます。

「エンコーディング:」コンボボックスは、ファイルに現在使用されているエンコーディングを具体的に示します。そこにはメモ帳よりも多くのテキストエンコーディングがリストされているため、世界中のさまざまなファイルを処理する場合に役立ちます。

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


いいですが、Visual Studioでファイルを開こうとすると、関連するテキストエディター(この種類のファイル拡張子についてはNotepad ++)で常にファイルを開きます。
barbara.post 2017

@ barbara.postは、Visual Studioの設定と関係があると思います。Visual Studioで任意のタイプのプレーンテキストファイルにアクセスできました。おそらく、その拡張子を持つファイルを検出したときにNotepad ++に移動するように指示したでしょう。それは少なくとも私の考えです。
JaykeBird 2017

2

信頼できる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)のみが、ドキュメントのエンコーディングを取得するための信頼できるアルゴリズムを備えています。他のすべてのエンコーディングでは、統計に基づくヒューリスティックを信頼する必要があります。

編集:

C#のPowershellバージョンの回答: ファイルのエンコーディングを見つける効果的な方法。署名(boms)でのみ機能します。

# 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

1
@jeasoftありがとう。.netカレントディレクトリを設定するための修正を追加しました。 stackoverflow.com/questions/11246068/...
js2010

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.