Windows에서 파일 인코딩 받기


206

이것은 실제로 프로그래밍 문제가 아니며 텍스트 파일의 현재 인코딩을 가져 오는 명령 줄이나 Windows 도구 (Windows 7)가 있습니까? 물론 작은 C # 앱을 작성할 수는 있지만 이미 내장 된 것이 있는지 알고 싶습니까?


12
Windows에서 파일 인코딩을 추측 하면 제목이 있어야합니다. 미리 알지 못하면 절대 추측 할 수 없습니다.
Tom Blodget

답변:


222

Windows와 함께 제공되는 일반 오래된 바닐라 메모장을 사용하여 파일을 엽니 다.
" 다른 이름으로 저장 ... " 을 클릭하면 파일 인코딩이 표시됩니다 .
다음과 같이 보일 것입니다 : 여기에 이미지 설명을 입력하십시오

기본적으로 선택된 인코딩이 무엇이든, 그것은 현재 인코딩이 파일에 대한 것입니다.
UTF-8 인 경우 ANSI로 변경하고 저장을 클릭하여 인코딩을 변경하거나 비자를 변경할 수 있습니다.

다양한 유형의 인코딩이 있다는 것을 알고 있지만 내보내기 파일이 UTF-8로되어 있고 ANSI가 필요하다는 알림을 받았을 때 필요한 모든 것입니다. 한 번만 수출되었으므로 메모장이 청구서에 적합했습니다.

참고 : 이해 한 바에 따르면 " 유니 코드 "(메모장에 나열 됨)는 UTF-16의 잘못된 이름 이라고 생각 합니다.
메모장의 " 유니 코드 "옵션에 대한 추가 정보 : Windows 7-UTF-8 및 Unicdoe


1
@Alex, Win-8을 사용하지 않습니다. Google 검색을 수행하면서 Win-8 Notepad 링크를 발견했습니다 . 나는 당신이 그것을 확신하기 때문에 당신이 그것을 찾을 수 있기를 바랍니다.
MikeTeeVee

1
고맙지 만 Windows 8.1에는 메모장이라는 앱이 없습니다. 검색에 메모장을 입력하면 "편집기"가 나타납니다. 그리고 이것은 엔딩 드롭 다운 메뉴도없고 메뉴도 없습니다
Alex

4
메모장을 열기에 너무 큰 파일에는이 방법이 작동하지 않습니다. 그리고 그 한계는 메모장 ++와 같은 다른 편집기보다 훨씬 빠릅니다. 내 Windows 8.1에는 메모장이 있습니다. % windir % \ system32 \ notepad.exe를 보시겠습니까?
Fabian Kessler

3
메모장은 Windows 8 및 Windows 10에 있습니다.
Alan B

6
메모장은 Windows 3부터 모든 버전의 Windows에 설치됩니다.
Jean-François Larvoire

64

(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; CRLF 줄 종결자가 포함 된 ASCII C ++ 프로그램 텍스트
    ipch; 예배 규칙서
    main.cpp; CRLF 줄 종결자가 포함 된 ASCII C 프로그램 텍스트
    Precision.txt; CRLF 줄 종결자가 포함 된 ASCII 텍스트
    해제; 예배 규칙서
    Speed.txt; CRLF 줄 종결자가 포함 된 ASCII 텍스트
    SquareRoot.sdf; 데이터
    SquareRoot.sln; CRLF 줄 종결자가 포함 된 UTF-8 유니 코드 (BOM 포함) 텍스트
    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; CRLF 줄 종결자가 포함 된 ASCII C 프로그램 텍스트
    UpgradeLog.XML; XML 문서 텍스트

    C : \ Users \ SH \ Downloads \ SquareRoot> 파일 --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

내 파일의 경우는 "바이너리":( 말한다
barbara.post

1
기본 작업을 위해 명령 줄로 되돌릴 필요가없는 것은 2017 년이지만 괜찮습니다.
Todd Partridge

1
마찬가지로 다른 대답은 말합니다, 당신은 또한 사용할 수 있습니다 file에서 명령을 Cygwin에서 . Windows 용 POSIX 도구 세트는 모두 있어야 file합니다.
palswim

Windows 용 git을 설치 한 경우 GIT BASH (bash 에뮬레이터)가 포함되며 'file'명령이 포함됩니다. 그냥 그것을 사용하고 작동합니다. 다음 답변에도 언급되어 있습니다.
Amir Katz

61

Windows 시스템에 "git"또는 "Cygwin"이 있으면 파일이있는 폴더로 이동하여 다음 명령을 실행하십시오.

file *

그러면 해당 폴더에있는 모든 파일의 인코딩 세부 정보가 제공됩니다.


당신이 특정 파일에 관심이 있다면 당신의 대답에 추가, 당신은 사용할 수 있습니다 그렙 명령 의 결과를 필터링하는 file *명령
칼릴 ebram을

맹목적으로 파일 명령을 실행하는 대신,이 질문에 답하는 전체 명령 file --mime-encoding은 파일의 인코딩을 얻는 것입니다.
smac89

23

내가 유용하다고 생각한 다른 도구 : https://archive.codeplex.com/?p=encodingchecker EXE는 여기 에서 찾을 수 있습니다


4
여러 파일을 분석하는 데 매우 도움이됩니다
Eric Bonnot

1
매우 큰 파일로도 즉각적인 답변을 얻을 수 있습니다.
Fabian Kessler

1
현재 Windows 10에서 작동합니다.
barbara.post

2
해당 페이지에서 exe 파일의 위치를 ​​알 수 없습니다. 링크가 오래 되었습니까?
Christoph

1
@MarkDeven 답변에 exe에 경로를 추가했습니다
user961954

17

다음은 BOM을 통해 유니 코드 텍스트 인코딩 패밀리를 감지하는 방법입니다. 이 방법은 텍스트 파일 (특히 유니 코드 파일)에서만 작동하고 asciiBOM이 없을 때 기본값으로 설정 되므로 정확도가 낮습니다 (대부분의 텍스트 편집기 UTF8와 같이 HTTP / 웹 에코 시스템을 일치시키려는 경우 기본값이 됨) ).

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입니까?
Xavier Poinas

poshcode 에는 많은 변형이 Get-FileEncoding있습니다. 나는 파이썬과 nodejs에서 punycode를 검토했지만이 작은 버전은 내 사용법으로 80/20에 도달합니다 (99/1과 유사). 다른 사람들의 파일을 호스팅하는 경우 fileSyben의 답변 ( stackoverflow.com/a/34766140/195755 ) 또는 다른 프로덕션 품질의 유니 코드 디코더 에서 명령 을 사용하는 것이 좋습니다 .
yzorg

BOM이있는 경우에만이 방법이 작동한다는 점을 덧붙여 야합니다. 항상 그런 것은 아닙니다.
Yepeekai

@Yepeekai 마지막 줄은 default인코딩입니다 (BOM이 없을 때). XML, JSON 및 JavaScript의 경우 기본값은 UTF8이지만 마일리지는 다를 수 있습니다.
yzorg

@ yzorg : 그러나 그것은 그것을하는 두뇌 죽은 방법입니다. 당신은 단지 사용자에게 거짓말을하고 있습니다. 적어도 대부분의 파서는 교육받은 추측을합니다. 추측 할 수 없다면 오류를 던져서 코드를 사용하기 위해 BOM이 필요하다고 알려줍니다 (그리고 이미 존재하는 다른 똑똑한 도구를 사용하십시오).
Ed 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 *. 당신은 .EXE 포함해야 작업에 PS 별칭에 대한 명령.

그러나 PowerShell profile.ps1을 사용자 지정하지 않으면 https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0으로 시작하여 저장하십시오 ~\Documents\WindowsPowerShell. 자식없이 컴퓨터에서 사용하는 것이 안전하지만 자식을 찾지 못하면 경고를 씁니다.

이 명령 의 .exeC:\WINDOWS\system32\where.exepowershell에서 사용하는 방법이기도합니다 . powershell * shrug *에 의해 "기본적으로 숨겨져있는"다른 많은 OS CLI 명령.


1
또는 ¯ \ _ (ツ) _ / ¯ file대신 file.exe의 별칭으로 사용할 수 있습니다.file.exe
ferrell_io

@ferrell_io TL; DR : PS는 .NET 및 .NET 기반으로하는 파일 정적 클래스를 갖고, PS가 이길 EXE에서 PS 차별화 .EXE를 사용하는 것이 일반적인 EXE에 충분히 혼란 과부하 가지고 dir | where Size -lt 10000대를 where.exe git.
yzorg

@ferrell_io PS의 기본 별칭 인 PS와 where.exe구별 하기 위해 사용 합니다 . 예 : 대 whereWhere-Objectwhere.exe git*ls . | where Size -lt 10000
yzorg

@ferrell_io 따라서 file.exevs. .NET 정적 클래스에 동일한 패턴을 사용합니다 . 인코딩을 감지하는 동일한 스크립트에 필요할 수 있습니다. 예 : [File]::SetCreationTime("readme.md", [DateTime]::Now).
yzorg 's November

6

간단한 해결책은 Firefox에서 파일을 여는 것입니다.

  1. 파일을 파이어 폭스로 드래그 앤 드롭
  2. 페이지를 마우스 오른쪽 버튼으로 클릭하십시오
  3. "페이지 정보보기"를 선택하십시오

텍스트 인코딩이 "페이지 정보"창에 나타납니다.

여기에 이미지 설명을 입력하십시오

참고 : 파일이 txt 형식이 아닌 경우 파일 이름을 txt로 바꾸고 다시 시도하십시오.

추신 : 자세한 내용은 기사를 참조 하십시오.


4

git을 설치하십시오 (Windows에서는 git bash 콘솔을 사용해야합니다). 유형:

file *   

현재 디렉토리의 모든 파일 또는

file */*   

모든 서브 디렉토리의 파일



2

메모장에서 위에 나열된 솔루션과 유사하게, 사용중인 경우 Visual Studio에서 파일을 열 수도 있습니다. Visual Studio에서 "파일> 고급 저장 옵션 ..."을 선택할 수 있습니다.

"인코딩 :"콤보 상자는 현재 파일에 어떤 인코딩이 사용되고 있는지 구체적으로 알려줍니다. 메모장보다 텍스트 인코딩이 훨씬 많으므로 전 세계의 다양한 파일을 처리 할 때 유용합니다.

메모장과 마찬가지로 옵션 목록에서 인코딩을 변경 한 다음 "확인"을 누른 후 파일을 저장할 수도 있습니다. 다른 이름으로 저장 대화 상자의 "인코딩으로 저장 ..."옵션을 통해 원하는 인코딩을 선택할 수도 있습니다 (저장 버튼 옆의 화살표를 클릭하여).


멋지지만 Visual Studio로 파일을 열려고하면 항상 관련 텍스트 편집기 (이런 종류의 파일 확장명을위한 메모장 ++)에서 파일을 엽니 다.
barbara.post

@ barbara.post는 Visual Studio 설정과 관련이 있다고 생각합니다. Visual Studio에서 모든 유형의 일반 텍스트 파일에 액세스 할 수있었습니다. 당신은 아마 그 확장명을 가진 파일을 만날 때마다 메모장 ++로 가라고 지시했을 것입니다. 적어도 내 생각이다.
JaykeBird

2

신뢰할 수있는 ascii, bom 및 utf8 감지를위한 일부 C 코드 : https://unicodebook.readthedocs.io/guess_encoding.html

ASCII를 사용하는 ASCII, UTF-8 및 BOM을 사용하는 인코딩 (UTF-7은 BOM, UTF-8은 BOM, UTF-16 및 UTF-32)을 사용하여 문서의 인코딩을 얻는 신뢰할 수있는 알고리즘이 있습니다. 다른 모든 인코딩의 경우 통계를 기반으로하는 휴리스틱을 신뢰해야합니다.

편집하다:

C #의 파워 쉘 버전은 다음과 같이 답변 합니다. 파일의 인코딩을 효과적으로 찾는 방법 . 서명 (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.