Codering van een bestand in Windows

Dit is niet echt een programmeervraag, is er een opdrachtregel of Windows-tool (Windows 7) om de huidige codering van een tekstbestand te krijgen? Natuurlijk kan ik een kleine C #-app schrijven, maar ik wilde weten of er al iets is ingebouwd?


1, Autoriteit 100%

Open uw bestand met behulp van gewone oude vanille-notitieblok die wordt geleverd met ramen.
Het toont u de codering van het bestand wanneer u op “Opslaan als … ” klikt.
Het zal er zo uitzien:

Wat de standaard geselecteerde codering ook is, dat is wat uw huidige codering is voor het bestand.

Als het UTF-8 is, kunt u het wijzigen in ANSI en klikt u op Opslaan om de codering (of visa-versa) te wijzigen.

Ik realiseer me dat er veel verschillende soorten codering zijn, maar dit was alles wat ik nodig had toen ik op de hoogte was dat onze exportbestanden in UTF-8 waren en ze hadden ANSI nodig. Het was een OneDime-export, dus Kladblok fit de rekening voor mij.

FYI: Van mijn begrip denk ik “Unicode ” (zoals vermeld in Kladblok) is een verkeerde nieuw voor UTF-16.
Meer hier op notepad’s “Unicode ” optie: Windows 7 – UTF -8 en unicdoe


2, Autoriteit 32%

Als u “git” of “Cygwin” op uw Windows-machine hebt, gaat u naar de map waar uw bestand aanwezig is en de opdracht uitvalt:

file *

Hiermee geeft u de coderingsdetails van alle bestanden in die map.


3, Autoriteit 27%

Het (Linux)-opdrachtregel Tool ‘FILE’ is beschikbaar op Windows via GNUWIN32:

http://gnuwin32.sourceforge.net/packages/file.htm

Als je git hebt geïnstalleerd, staat het in C:\Program Files\git\usr\bin.

Voorbeeld:

C:\Users\SH\Downloads\SquareRoot>file *
  _UpgradeReport_Files; map
  debuggen; map
  duur.h; ASCII C++ programmatekst, met CRLF-regelafsluitingen
  ipch; map
  hoofd.cpp; ASCII C-programmatekst, met CRLF-regelafsluitingen
  Precisie.txt; ASCII-tekst, met CRLF-lijnafsluitingen
  Uitgave; map
  Snelheid.txt; ASCII-tekst, met CRLF-lijnafsluitingen
  SquareRoot.sdf; gegevens
  SquareRoot.sln; UTF-8 Unicode (met stuklijst) tekst, met CRLF-regelafsluitingen
  SquareRoot.sln.docstates.suo; PCX ver. 2.5 beeldgegevens
  SquareRoot.suo; CDF V2-document, beschadigd: kan samenvattingsinformatie niet lezen
  SquareRoot.vcproj; XML-documenttekst
  SquareRoot.vcxproj; XML-documenttekst
  SquareRoot.vcxproj.filters; XML-documenttekst
  SquareRoot.vcxproj.gebruiker; XML-documenttekst
  vierkantswortelmethoden.h; ASCII C-programmatekst, met CRLF-regelafsluitingen
  UpgradeLog.XML; XML-documenttekst
  C:\Users\SH\Downloads\SquareRoot>file --mime-encoding *
  _UpgradeReport_Files; binair
  debuggen; binair
  duur.h; ons-ascii
  ipch; binair
  hoofd.cpp; ons-ascii
  Precisie.txt; ons-ascii
  Uitgave; binair
  Snelheid.txt; ons-ascii
  SquareRoot.sdf; binair
  SquareRoot.sln; utf-8
  SquareRoot.sln.docstates.suo; binair
Squareroot.Suo; CDF V2-document, corrupt: kan geen infobinaire samenvatting lezen
  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

4, Autoriteit 9%

Nog een tool die ik nuttigs heb gevonden: https://archive.codeplex.com/?p=encoderingchecker
EXE is te vinden hier


5, Autoriteit 7%

Hier kunt u hoe u de Unicode-familie van tekstcoderingen via BOM kunt detecteren. De nauwkeurigheid van deze methode is laag, omdat deze methode alleen werkt op tekstbestanden (specifiek Unicode-bestanden) en standaardinstellingen op asciiwanneer er geen bom aanwezig is (zoals de meeste teksteditors, zou de standaardinstelling UTF8Als u overeenkomt met het http / web-ecosysteem).

UPDATE 2018 : Ik raad deze methode niet langer aan. Ik raad aan bestand.exe te gebruiken van git of * nix-tools zoals aanbevolen door @Sybren, en Ik laat zien hoe dat te doen via PowerShell in een later antwoord .

# 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

Aanbeveling: dit kan redelijk goed werken als de dir, lsof Get-ChildItemalleen bekende tekstbestanden controleert, en wanneer u bent alleen op zoek naar “slechte coderingen” uit een bekende lijst met tools. (d.w.z. SQL Management Studio is standaard ingesteld op UTF16, waardoor GIT auto-cr-lf voor Windows werd verbroken, wat jarenlang de standaard was.)


Antwoord 6, autoriteit 4%

Installeer git (op Windows moet je de git bash console gebruiken). Typ:

file *   

voor alle bestanden in de huidige map , of

file */*   

voor de bestanden in alle submappen


Antwoord 7, autoriteit 4%

Een eenvoudige oplossing zou kunnen zijn om het bestand in Firefox te openen.

  1. Sleep het bestand en zet het neer in Firefox
  2. Klik met de rechtermuisknop op de pagina
  3. Selecteer “Pagina-info bekijken”

en de tekstcodering verschijnt in het venster “Pagina-info”.

Opmerking:Als het bestand niet in txt-indeling is, hernoemt u het gewoon naar txt en probeert u het opnieuw.

P.S. Zie ditvoor meer informatie. artikel.


8

Vergelijkbaar met de bovenstaande oplossing met Kladblok, kunt u ook het bestand in Visual Studio openen, als u dat gebruikt. In Visual Studio kunt u “File & GT; Geavanceerde Opslaan Opties selecteren …”

De “Codering:” Combo-box vertelt u specifiek welke codering momenteel wordt gebruikt voor het bestand. Het heeft veel meer tekstcoderingen die daar zijn vermeld dan Kladblok, dus het is handig bij het omgaan met verschillende bestanden van over de hele wereld en wat dan ook.

Net als Kladblok, kunt u ook de codering van de lijst met opties daar wijzigen en vervolgens het bestand opslaan na het raken van “OK”. U kunt ook de gewenste codering selecteren via de optie “Opslaan met codering …” in het dialoogvenster opslaan (door op de pijl naast de knop Opslaan te klikken).


9

De enige manier waarop ik dit heb gevonden, is vim of notepad ++.


10

Wat C-code hier voor betrouwbare ASCII, BOM’s en UTF8 Detectie: https: //unicodebook.readthedocs .io / gis_encodering.html

Alleen ASCII, UTF-8 en coderingen met behulp van een BOM (UTF-7 met BOM, UTF-8 met BOM,
UTF-16 en UTF-32) hebben betrouwbare algoritmen om de codering van een document te krijgen.
Voor alle andere coderingen moet u heuristieken vertrouwen op basis van statistieken.

EDIT:

Een PowerShell-versie van een C # Antwoord van: Effectieve manier om een ​​bestand te vinden Codering . Werkt alleen met handtekeningen (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

Antwoord 11

Op zoek naar een Node.js/npm-oplossing? Probeer encoding-checker:

npm install -g encoding-checker

Gebruik

Usage: encoding-checker [-p pattern] [-i encoding] [-v]
Options:
  --help                 Show help                                     [boolean]
  --version              Show version number                           [boolean]
  --pattern, -p, -d                                               [default: "*"]
  --ignore-encoding, -i                                            [default: ""]
  --verbose, -v                                                 [default: false]

Voorbeelden

Verkrijg codering van alle bestanden in de huidige map:

encoding-checker

Retourcodering van alle md-bestanden in de huidige map:

encoding-checker -p "*.md"

Krijg codering van alle bestanden in de huidige map en zijn submappen (zal behoorlijk wat tijd vergen voor grote mappen; lijkt niet te reageren):

encoding-checker -p "**"

Raadpleeg voor meer voorbeelden de npm docuof de officiële repository.


Antwoord 12

EncodingChecker

File Encoding Checker is een GUI-tool waarmee u de tekstcodering van een of meer bestanden kunt valideren. De tool kan de codering weergeven voor alle geselecteerde bestanden, of alleen de bestanden die niet de codering hebben die u opgeeft.

Bestandscoding Checker vereist .NET 4 of hoger om te worden uitgevoerd.

Other episodes