GNU/Linux >> Znalost Linux >  >> Linux

Dávkový převod kódování v souborech

Cygwin nebo GnuWin32 poskytují unixové nástroje jako iconv a dos2unix (a unix2dos ). V Unix/Linux/Cygwin budete chtít použít jako kódování "windows-1252" místo ANSI (viz níže). (Pokud nevíte, že váš systém používá jako výchozí kódovou stránku jinou kódovou stránku než 1252, v takovém případě budete muset sdělit iconv správná kódová stránka k překladu.)

Převést z jednoho (-f ) do druhého (-t ) s:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Nebo ve formě najdi vše a dobyj:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;

Případně:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

Tato otázka byla na tomto webu položena mnohokrát, takže zde jsou některé další informace o „ANSI“. V odpovědi na související otázku CesarB zmiňuje:

Existuje několik kódování, která se ve Windows nazývají „ANSI“. Ve skutečnosti je ANSI nesprávné pojmenování. iconv nemůže uhodnout, co chcete.

Kódování ANSI je kódování používané funkcemi "A" v rozhraní Windows API (funkce "W" používají UTF-16). Kterému kódování odpovídá, obvykle závisí na jazyku vašeho systému Windows. Nejběžnější je CP 1252 (také známý jako Windows-1252). Takže, když váš editor říká ANSI, znamená to „cokoli, co funkce API používají jako výchozí kódování ANSI“, což je výchozí kódování bez Unicode používané ve vašem systému (a tedy obvykle to, které se používá pro textové soubory).

Stránka, na kterou odkazuje, poskytuje tuto historickou lahůdku (citovanou z Microsoft PDF) o původu CP 1252 a ISO-8859-1, což je další často používané kódování:

[...] to pochází ze skutečnosti, že kódová stránka Windows 1252 byla původně založena na návrhu ANSI, který se stal normou ISO 8859-1. Přidáním kódových bodů do rozsahu vyhrazeného pro řídicí kódy ve standardu ISO se však kódová stránka Windows 1252 a následné kódové stránky Windows původně založené na řadě ISO 8859-x odchýlily od ISO. Dodnes není neobvyklé, že vývojářská komunita, jak v rámci Microsoftu, tak mimo něj, zaměňuje kódovou stránku 8859-1 s Windows 1252, stejně jako vidí „ANSI“ nebo „A“ používané k označení podpory kódové stránky Windows. .


S PowerShell můžete udělat něco takového:

Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt

Zatímco ENC je něco jako unicode , ascii , utf8 a utf32 . Podívejte se na 'soubor nápovědy'.

Chcete-li převést všechny soubory *.txt v adresáři na UTF-8, proveďte něco takového:

foreach($i in ls -name DIR/*.txt) { \
    Get-Content DIR/$i | \
    Out-File -encoding utf8 -filepath DIR2/$i \
}

který vytvoří převedenou verzi každého souboru .txt v DIR2.

Chcete-li nahradit soubory ve všech podadresářích, použijte:

foreach($i in ls -recurse -filter "*.java") {
    $temp = Get-Content $i.fullname
    Out-File -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}

Stránka Wikipedie na nových řádcích má sekci o konverzních nástrojích.

Zdá se, že toto je vaše nejlepší řešení pro konverzi pouze pomocí nástrojů dodávaných systémem Windows:

TYPE unix_file | FIND "" /V > dos_file

Linux
  1. Jak převést soubory do kódování UTF-8 v Linuxu

  2. Jak získat přístup k souborům Ubuntu 11.04 ve Windows 7?

  3. Odstraňte stažené aktualizace systému Windows

  1. Skryjte skryté soubory Linuxu ve Windows

  2. Převeďte spoustu souborů BMP do JPEG v systému Linux

  3. Převeďte konce řádků Unix na Windows

  1. Dávkový převod PNG na JPG v linuxu

  2. Proč nefungují soubory Windows EXE v systému Linux?

  3. Jaké jsou rozdíly mezi soubory .txt pro Linux a Windows (kódování Unicode)