To nie jest tak naprawdę pytanie programistyczne, czy istnieje wiersz poleceń lub narzędzie Windows (Windows 7), aby uzyskać bieżące kodowanie pliku tekstowego? Pewnie, że mogę napisać małą aplikację C #, ale chciałem wiedzieć, czy coś jest już wbudowane?
Otwórz plik za pomocą zwykłego starego waniliowego Notatnika dostarczanego z systemem Windows.
Po kliknięciu „ Zapisz jako ... ” wyświetli się kodowanie pliku .
Będzie to wyglądać tak:
Niezależnie od tego, jakie jest domyślnie wybrane kodowanie, takie jest twoje obecne kodowanie pliku.
Jeśli jest to UTF-8, możesz go zmienić na ANSI i kliknąć Zapisz, aby zmienić kodowanie (lub odwrotnie).
Zdaję sobie sprawę, że istnieje wiele różnych rodzajów kodowania, ale to wszystko, czego potrzebowałem, kiedy zostałem poinformowany, że nasze pliki eksportowe znajdują się w UTF-8 i wymagały ANSI. To był jednorazowy eksport, więc Notatnik pasował do mnie.
FYI: Z mojego zrozumienia uważam, że „ Unicode ” (jak wymieniono w Notatniku) jest błędem dla UTF-16.
Więcej informacji o opcji „ Unicode ” Notatnika : Windows 7 - UTF-8 i Unicdoe
@Alex, nie używam Win-8. Przeprowadzając wyszukiwanie w Google, znalazłem ten link: Notatnik Win-8 . Mam nadzieję, że ją znajdziesz, ponieważ zapewniam cię, że wciąż tam jest.
Dzięki, ale w systemie Windows 8.1 zdecydowanie nie ma aplikacji o nazwie notatnik. Po wprowadzeniu notatnika do wyszukiwania pojawia się „edytor”. I to nie ma tego rozwijanego menu endodontów i żadnego menu
Ta metoda nie działa w przypadku plików, które są zbyt duże, aby otworzyć Notatnik. Ten limit jest osiągany znacznie szybciej niż inne edytory, takie jak Notepad ++. Mój Windows 8.1 ma Notatnik. Zajrzyj do% windir% \ system32 \ notepad.exe może?
Jeśli masz zainstalowany git, znajduje się on w folderze C: \ Program Files \ git \ usr \ bin.
Przykład:
C: \ Users \ SH \ Downloads \ SquareRoot> plik *
_UpgradeReport_Files; informator
Odpluskwić; informator
czas trwania. h; Tekst programu ASCII C ++ z terminatorami linii CRLF
ipch; informator
main.cpp; Tekst programu ASCII C z zakończeniami linii CRLF
Precision.txt; Tekst ASCII z zakończeniami linii CRLF
Wydanie; informator
Speed.txt; Tekst ASCII z zakończeniami linii CRLF
SquareRoot.sdf; dane
SquareRoot.sln; Tekst UTF-8 Unicode (z BOM), z zakończeniami linii CRLF
SquareRoot.sln.docstates.suo; PCX ver. 2,5 danych obrazu
SquareRoot.suo; Dokument CDF V2, uszkodzony: Nie można odczytać informacji podsumowujących
SquareRoot.vcproj; Tekst dokumentu XML
SquareRoot.vcxproj; Tekst dokumentu XML
SquareRoot.vcxproj.filters; Tekst dokumentu XML
SquareRoot.vcxproj.user; Tekst dokumentu XML
squarerootmethods.h; Tekst programu ASCII C z zakończeniami linii CRLF
UpgradeLog.XML; Tekst dokumentu XML
C: \ Users \ SH \ Downloads \ SquareRoot> plik - kodowanie MIME *
_UpgradeReport_Files; dwójkowy
Odpluskwić; dwójkowy
czas trwania. h; us-ascii
ipch; dwójkowy
main.cpp; us-ascii
Precision.txt; us-ascii
Wydanie; dwójkowy
Speed.txt; us-ascii
SquareRoot.sdf; dwójkowy
SquareRoot.sln; utf-8
SquareRoot.sln.docstates.suo; dwójkowy
SquareRoot.suo; Dokument CDF V2, uszkodzony: Nie można odczytać streszczenia pliku informacyjnego
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
Jeśli zainstalowałeś git dla Windows, zawiera on GIT BASH (emulator bash), który z kolei zawiera polecenie „file”. Właśnie go użyłem i działa. Wspomniano o tym również w następnej odpowiedzi ...
Zamiast po prostu ślepo działającego polecenia pliku, pełnym poleceniem, które odpowiada na to pytanie, jest file --mime-encodinguzyskanie kodowania pliku
Oto moje podejście do wykrywania rodziny kodowań tekstowych Unicode za pomocą BOM. Dokładność tej metody jest niska, ponieważ ta metoda działa tylko na plikach tekstowych (w szczególności plikach Unicode) i domyślnie jest stosowana, asciigdy nie ma BOM (jak większość edytorów tekstowych, domyślnie byłoby, UTF8jeśli chcesz dopasować ekosystem HTTP / web) ).
# from https://gist.github.com/zommarin/1480974functionGet-FileEncoding($Path){
$bytes =[byte[]](Get-Content $Path -Encoding byte -ReadCount4-TotalCount4)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
Zalecenie: To może pracować dość dobrze, jeśli dir, lslub Get-ChildItemtylko sprawdza znane pliki tekstowe, a gdy tylko szukasz kodowań „złych” Z listy znanych narzędzi. (tzn. domyślnie SQL Management Studio to UTF16, który złamał GIT auto-cr-lf dla Windows, który był domyślny przez wiele lat).
Istnieje wiele odmian Get-FileEncodingkodu poshcode. Sprawdziłem nawet kod punycode z python i nodejs, ale ta mała wersja trafiła w 80/20 dla mojego użycia (bardziej jak 99/1). Jeśli przechowujesz pliki innych osób, sugeruję użycie filepolecenia z odpowiedzi Sybena ( stackoverflow.com/a/34766140/195755 ) lub innego dekodera Unicode jakości produkcyjnej.
@Yepeekai Ostatni wiersz jest kodowany default(gdy nie ma BOM). W przypadku XML, JSON i JavaScript wartością domyślną jest UTF8, ale przebieg może się różnić.
@yzorg: ale jest to sposób na martwy mózg. Okłamujesz tylko użytkownika. Przynajmniej większość parserów zgaduje. Jeśli nie możesz zgadnąć, po prostu wyślij błąd i powiedz, że do korzystania z kodu wymagany jest zestawienie komponentów (a następnie skorzystaj z innego, inteligentniejszego narzędzia, ponieważ wiele już istnieje).
Napisałem odpowiedź nr 4 (w momencie pisania). Ale ostatnio zainstalowałem git na wszystkich moich komputerach, więc teraz używam rozwiązania @ Sybren. Oto nowa odpowiedź, która sprawia, że to rozwiązanie jest przydatne z PowerShell (bez umieszczania całego git / usr / bin w PATH, co jest dla mnie zbyt dużym bałaganem).
I używany jak: file.exe --mime-encoding *. Państwo musi zawierać .exe w komendzie PS alias do pracy.
Ale jeśli nie dostosujesz swojego profilu PowerShell.ps1, sugeruję zacząć od mojego: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0
i zapisz go w ~\Documents\WindowsPowerShell. Można go bezpiecznie używać na komputerze bez git, ale zapisuje ostrzeżenia, gdy git nie zostanie znaleziony.
Plik .exe w poleceniu jest także używany w programie C:\WINDOWS\system32\where.exePowerShell; oraz wiele innych komend CLI systemu operacyjnego, które są „domyślnie ukryte” przez PowerShell, * wzruszenie ramion *.
@ferrell_io TL; DR: PS jest oparta na .NET i .NET posiada klasę statyczną Plik, a PS ma dość mylące przeciążeń o wspólnych EXE że używam PS .exe do odróżnienia od Win EXE: dir | where Size -lt 10000vs where.exe git.
@ferrell_io Używam where.exedo odróżnienia go od wherePS, który jest wbudowanym aliasem Where-Object. Przykład: where.exe git* vs ls . | where Size -lt 10000
@ferrell_io Używam tego samego wzorca dla file.exeklasy statycznej vs .NET, która może być potrzebna w tym samym skrypcie wykrywającym kodowanie. Przykład: [File]::SetCreationTime("readme.md", [DateTime]::Now).
Podobnie do rozwiązania wymienionego powyżej w Notatniku, możesz również otworzyć plik w Visual Studio, jeśli go używasz. W Visual Studio możesz wybrać „Plik> Zaawansowane opcje zapisywania ...”
Pole kombi „Kodowanie:” powie ci, które kodowanie jest obecnie używane dla pliku. Zawiera o wiele więcej kodowań tekstowych niż Notatnik, więc jest to przydatne, gdy mamy do czynienia z różnymi plikami z całego świata i cokolwiek innego.
Podobnie jak Notatnik, możesz również zmienić kodowanie z listy dostępnych tam opcji, a następnie zapisać plik po naciśnięciu „OK”. Możesz także wybrać odpowiednie kodowanie za pomocą opcji „Zapisz z kodowaniem ...” w oknie dialogowym Zapisz jako (klikając strzałkę obok przycisku Zapisz).
Fajnie, ale kiedy próbuję otworzyć plik za pomocą Visual Studio, zawsze otwiera on plik w powiązanym edytorze tekstu (Notepad ++ dla tego rodzaju rozszerzenia pliku).
@ barbara.post, to może mieć coś wspólnego z Twoimi ustawieniami Visual Studio. Byłem w stanie uzyskać dostęp do dowolnego zwykłego pliku tekstowego dowolnego typu w Visual Studio. Prawdopodobnie powiedziałeś, aby po prostu przechodził do Notepad ++ za każdym razem, gdy napotka plik z tym rozszerzeniem. Przynajmniej takie są moje myśli.
Tylko ASCII, UTF-8 i kodowanie przy użyciu BOM (UTF-7 z BOM, UTF-8 z BOM, UTF-16 i UTF-32) mają niezawodne algorytmy do uzyskania kodowania dokumentu. W przypadku wszystkich innych kodowań musisz zaufać heurystyce opartej na statystykach.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.