[PHP] Detekcia kodovania txt suboru

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod 2ge 18. 12. 2008 11:04

Ahojte,

riesim nasledovny problem: mam rozne textove subory a potrebujem zistit kodovanie. To znamena volat nejaku funkciu a ta mi vrati napriklad UTF8, ISO-8859-1, ISO-8859-2 a podobne.

Skusal som http://sk.php.net/manual/en/function.mb ... coding.php ale to nerobi to co chcem, napr echo mb_detect_encoding('skúška'); vrati UTF-8 co je nezmysel.

Neriesil to nahodou niekto ?

Vdaka.
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 18. 12. 2008 11:35

Detekce kodovani neni nikdy spolehliva.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Nargon 18. 12. 2008 12:14

Nevim proc by to byl nesmysl. Podle me retezec "skúška" klidne muze byt v UTF8
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod -b3h- 18. 12. 2008 12:25

Nemel jsi nahodou zakodovany soubor, ve kterem jsi zkousel
Kód: Vybrat vše
echo mb_detect_encoding('skúška');

na UTF-8? Jestli ano tak se pak nediv že Ti to vratilo UTF-8 ...
-b3h-
Junior

Odeslat příspěvekod 2ge 19. 12. 2008 06:35

chalani:

1. viem ze detekcia kodovania nie je nikdy spolahliva, viem ze tam budu chyby, mne ide o to, poradte - ako to spravit najlepsie.
2. Nargon: subor nie je utf8, skusal som aj toto: '''echo mb_detect_encoding("\x73\x6B\xFA\x9B\x6A\x61");''' - hodi to UTF-8

nejake napady...?
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod mracka michal 19. 12. 2008 08:17

...to "mb" nie je nahodou od "Multi-Byte"? Potom by som sa necudoval, keby to win-1250 a cp850 nechapalo... Inak na sk.php.net doporucuju ako posledny parameter uviest zoznam moznych kodovani, z ktorych to ma vybrat.
„You don't need a reason to help people.”
~Zidane Tribal, Final Fantasy IX
--
Pouzivam suborovy manazer Nomad.Net.
mracka michal
Junior
Uživatelský avatar

Odeslat příspěvekod 2ge 19. 12. 2008 08:45

miso, dik za odpoved. Ano, zda sa, ze najlepsie asi bude, ak zistim ci je to UTF8, a ak nie, tak to porovnat cez mb_detect_encoding a hodit tam zoznam moznych kodovani a utf8 dat mozno na posledne miesto. Poskusam, pohram sa s tym. Dik za napad.
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod 2ge 22. 12. 2008 08:55

vzdy mi to detekuje "ISO-8859-1", kod:

Kód: Vybrat vše
$ary[] = "ISO-8859-1";
$ary[] = "ISO-8859-2";
$ary[] = "ISO-8859-3";
$ary[] = "ISO-8859-4";
$ary[] = "ISO-8859-5";
$ary[] = "ISO-8859-6";
$ary[] = "ISO-8859-7";
$ary[] = "ISO-8859-8";
$ary[] = "ISO-8859-9";
$ary[] = "ISO-8859-10";
$ary[] = "ISO-8859-13";
$ary[] = "ISO-8859-14";
$ary[] = "ISO-8859-15";
$ary[] = "ISO-8859-16";
$ary[] = "JIS";
$ary[] = "EUC-JP";
$ary[] = "SJIS";
$ary[] = "eucJP-win";
$ary[] = "SJIS-win";
$ary[] = "ISO-2022-JP";
$ary[] = "ASCII";
$ary[] = "UTF-7";
$ary[] = "UTF-8";
mb_detect_order($ary);


napriklad na Cinske titulky mi to hodi tiez nezmyselne ISO-8859-1, titulky tu: http://www.opensubtitles.org/en/download/sub/3391365
kod:
Kód: Vybrat vše
echo mb_detect_encoding($contents) . "\n";


Asi sa na to vykaslem :) Ono by bolo najlepsie mat na to nejaku class uz hotovu, cudujem sa ze nic take neexistuje.
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod mracka michal 22. 12. 2008 09:44

No, ma asi pravdu. Ten text sa zrejme da interpretovat ako ISO-8859-1.

Co vlastne potrebujes riesit? Z ulozeneho textoveho suboru zistit, v akej je kodovej stranke? Vela stastia. Mozes rovno hadzat kockou. Na spolahlive urcenie potrebujes kontext.
„You don't need a reason to help people.”
~Zidane Tribal, Final Fantasy IX
--
Pouzivam suborovy manazer Nomad.Net.
mracka michal
Junior
Uživatelský avatar

Odeslat příspěvekod 2ge 23. 12. 2008 06:37

no tak to asi fakt nepojde. Myslel som si, ze v kazdej kodovej stranke su nejake specialne znaky, ktore v inych kodovych strankach nie su a podla toho by sa to dalo urcit. Kazdopadne dik.
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod mracka michal 23. 12. 2008 08:05

Neupresnil si co to vlastne riesis.

Lebo ak to potrebujes pri uploade suborov, tak by si mozno mohol nieco vycitat z http requestu. (?)

Ak sa jedna o ulozene subory mozno by bolo trochu jednoduchsie urcit jazyk alebo jazykovu skupinu. (?) (vid Google)
„You don't need a reason to help people.”
~Zidane Tribal, Final Fantasy IX
--
Pouzivam suborovy manazer Nomad.Net.
mracka michal
Junior
Uživatelský avatar

Odeslat příspěvekod 2ge 23. 12. 2008 20:57

riesim toto: http://forum.opensubtitles.org/viewtopic.php?t=1580

cez upload suborov by to teoreticky slo zistit, problem je, ze tych ulozenych suborov mam uz nieco cez 500.000 a tam to potrebujem zistit.
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 7. 1. 2009 00:05

no mam jeden taky UUUUUUF napad...
Skus si spravit "vzorkovnik" na niekolko velmi pouzivanych slov (typ "ano" "preco" atd), detekovat text na dane slova a pozerat aka chybna interpretacia vznikla... Podla typu chyby pouzit vhodny prepis na titulky....

Viem ze dane riesenie je VEEELMI pracne, ale pridava kontext a aj pomerne dost spolahlive riesenie (po vytvoreni spolahlivej funkcie samozrejme)...

Vela stastia ak sa do toho pustis ;)
gandor
Mírně pokročilý


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků