Portál AbcLinuxu, 10. května 2025 08:16

Dotaz: Zjištění kódování souboru

15.9.2015 12:28 Petr
Zjištění kódování souboru
Přečteno: 1958×
Odpovědět | Admin
Dobrý den, existuje spolehlivý nástroj v linuxu na zjištění v jakém kódování je soubor uložen. Co se týče zjištění našel jsem nejoblíbenější příkaz
file -bi <filename>
Tak jsem si vytvořil ve windows php soubor v pspadu s kováním cp1250. Uložil jsem ho a zavolal tento příkaz. Odpověd je: text/x-php; charset=unknown-8bit To mě tedy moc neuspokojuje. Představovl bych si že odpověd bude cp1250. Proč to pspad dokáže a příkaz "file" nikoliv? A existuje nástroj který to dokáže? Díky za rady.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.9.2015 12:38 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Spolehlivý příkaz neexistuje z jednoho důvodu textový soubor v sobě nenese žádnou informaci o kodování.

Kodování se hádá podle slov z diakritikou zda dávají smysl a zda jsou tam platné znaky z nějakého kodování.
15.9.2015 13:23 Petr
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
A jak to ten pspad teda dělá že když uložím i třeba prázdný soubor a pak ho znovu otevřu tak je tam to kódování, které jsem tam nastavil. On si tam ukládá nějakou meta informaci nebo co? Díky
15.9.2015 14:10 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
To já nevím windows soubory nepoužívám takže nevím co tam ukládají, ale pak to asi nebude textový soubor.
15.9.2015 14:48 R
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
V prazdnom subore sa dost tazko ukladaju nejake informacie, takze jedine vysvetlenie je: ten editor si niekam mimo uklada informacie o otvorenych suboroch a nastavenych kodovaniach.
Josef Kufner avatar 15.9.2015 15:04 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
... a poslední poloze kurzoru.
Hello world ! Segmentation fault (core dumped)
15.9.2015 16:37 tydyt
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Ty taky děláš v Redhatu?
Josef Kufner avatar 15.9.2015 17:11 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Ne, proč?
Hello world ! Segmentation fault (core dumped)
15.9.2015 16:33 tydyt
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Tak proč děláš hned chytrýho, když to sám nevíš! že to není viditelně vidět po otevření třeba ve vi nebo Emacsu? To je tím, že asi není sw pro Linux, který umí zobrazit informaci ze sektoru na disku a třeba i upravit jedinej bit na něm. A kdybys náhodou o nějakém věděl, pak nechápu tvoji odpověď.
15.9.2015 18:22 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Už jsem odpověděl jak se to dělá - prostě to hádá podle toho jaké znaky se v souboru vyskytují.

Jinak speciální editory si můžou různé údaje někam ukládat, z prázdného souboru nelze určit typ kodování pokud to není někde uložené a nebo pokud ten editor nepoužije kodování co bylo naposledy nebo co používá default OS a pod.....

Aby jsi to zjistil jak to pspad dělá tak koukni do jeho zdrojáků.
16.9.2015 09:02 leste
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Už jsem odpověděl jak se to dělá - prostě to hádá podle toho jaké znaky se v souboru vyskytují.

Přesně tak to dělá, prohlíží prvních nevímkolik (zapomněl jsem) znaků a podle toho hádá.

Na začátek všech souborů psaných v pspadu vrážím poznámku obsahující žš, abych mu to usnadnil. Vrazil bych tam i ť, ale kombinace vok+pspad mi pak nabídne nějakou blbost s velkými písmeny.

Jendа avatar 16.9.2015 21:35 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
To je tím, že asi není sw pro Linux, který umí zobrazit informaci ze sektoru na disku a třeba i upravit jedinej bit na něm.
dd + blhexflip
15.9.2015 17:25 j
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Dela to presne tak, ze to hada. Co na tom nechapes? Algoritmus hadani muze byt slusne uspesny, ale neni to proste 100%. V utf8 txt souboru muze (ale nemusi) byt Byte order mark. Jinak se to dela tak, ze proste vemes ASCII znaky, a vemes ostatni nonASCII, a udelas analyzu. Pokud je text dostatecne dlouhy a obsahuje pokud mozno vsechny hackocarkove znaky, tak se da s pomerne slusnou jistotou urcit, o jake kodovani jde. Predevsim proto, ze ac jsou nektere znaky kodovany trebas stejne, tak nektere jsou kodovany jinak => pokud najdu cojavim 9E ... tak sem na dobry ceste k tomu, rict, ze je to win-1250.
15.9.2015 16:22 tydyt
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Kodování se hádá podle slov z diakritikou zda dávají smysl a zda jsou tam platné znaky z nějakého kodování.
zdroj?
Josef Kufner avatar 15.9.2015 17:13 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Viz zdrojáky programů file a enca.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 15.9.2015 12:39 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus tam nakopírovat kus českého textu a uvidíš, jestli to trefí líp.
Hello world ! Segmentation fault (core dumped)
15.9.2015 12:47 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus enca.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
15.9.2015 12:54 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Enca je docela úspěšná, pokud není text příliš krátký:
$ cat /etc/motd 
Dobrý den, existuje spolehlivý nástroj v linuxu na zjištění v jakém kódování je soubor uložen? Co se týče zjištění našel jsem nejoblíbenější příkaz.

$ enca -L czech /etc/motd 
Universal transformation format 8 bits; UTF-8
-- OldFrog
15.9.2015 14:46 R
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
CP1250 v PHP je brutalna prasacina. Zial, niektori ludia dodnes taketo veci robia.
15.9.2015 16:07 Vasek
Rozbalit Rozbalit vše Re: Zjištění kódování souboru

Taky nechápu lidi, kteří v době znakové sady Unicode, resp. v jejím nejčastěji používaném kódování UTF-8, stále ještě použivájí takovouto "prasečinu.

15.9.2015 16:36 tydyt
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Další pitomec! Na to se nikdo neptá!
15.9.2015 16:40 Vasek
Rozbalit Rozbalit vše Re: Zjištění kódování souboru

To už ani nemůže člověk napsat vlastní názor, aniž by byl nazván pitomcem?

15.9.2015 18:14 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Toho si nevšímaj, to je miestne zvieratko pavelka, ňupáč a stoinýchmien. Toho si tu pestujú cenzori ako domáce zvieratko, aby mohli vykazovať nejakú činnosť. Obvykle inkllinujúcu k nule.
16.9.2015 11:55 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zjišťování kódování českého textu je spíše hádáním.
$ echo "příšerně žluťoučký kůň úpěl ďábelské ódy" >text
$ file -bi text
text/plain; charset=utf-8

$ recode u8..1250 text
$ file -bi text
text/plain; charset=unknown-8bit

$ recode 1250..l2 text
$ file -bi text
text/plain; charset=iso-8859-1

$ recode l2..UTF-16 text
$ file -bi text
text/plain; charset=utf-16be
Jak je vidět, příkaz file spolehlivě detekuje pouze Unicode. Dnes už vlastně ostatní kódování postrádají na významu.

Poslední dobou do PHP pro jistotu české texty vůbec nedávám. Pouze do šablon - tam je při vynechání deklarace automaticky předpokládáno UTF-8 či UTF-16 s automatickou detekcí. A protože UTF-8 používám nativně, vůbec to nemusím řešit.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
16.9.2015 12:11 neklan | skóre: 11 | blog: neklan_no_clan
Rozbalit Rozbalit vše Re: Zjištění kódování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
pokud predpokladas jazyk pomuze enca
cat cp1250file.txt | enca -L czech -g -c -x UTF-8
prevede cesky text do UTF-8.

nedavno jsem se prehraboval ve starych archivech pdb knizek a tohle mi pomohlo. zjevne to nemusi fungovat vzdycky. nektere soubory jsou dojebane totalne, napr. obsahuji vice ruznych kodovani, kdy je ruzni lide otevirali a ukladali jen casti a na zbytek kaslali. V tom pripade uz asi jedine rucne.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.