ugrás a tartalomhoz

csv fájl karakter kódolási gond

Blackfriar · 2010. Nov. 9. (K), 20.06
Sziasztok !
Ismét egy egyszerű problémával jelentkezem. :-)
Még csak egy napja küzdök vele.
Nos Excelben létrehozott csv fájlba merészeltem ékezetes karaktereket írni, amiket PHP-vel jelenítek meg.
Az eredmény szánalmas, mint ahogy már megszokhattuk a számítástechnikában, hiszen emberek alkották.
Az ügyeskedéseim nyomán vagy az oldalon jelennek meg kriksz-krakszok az ékezetes karakterek helyén, vagy a fájl Excelben történő megnyitásakor.
Azt már nem is említem, más szerveren pedig teljesen más eredményt kapok.

Ebben a mai bonyolult, rohanó világban csak egyszerűen azt szeretném elérni, hogy mind az oldalon, mind Excelben való megnyitáskor egy olvasható szöveget lássak. Tudom, hogy sokat kérek, de azért megpróbálkozom a dologgal.
 
1

Amikor exportálod a csv-t

ironwill · 2010. Nov. 9. (K), 20.37
Amikor exportálod a csv-t akkor állítsd be a kódolási formátumát utf-8-ra, vagy olyan típusúra, amilyet a php fájlban használsz.
2

mit értesz azon

Blackfriar · 2010. Nov. 9. (K), 20.47
Mit értesz azon, hogy exportálom?
A csv fájl mentésekor semmilyen kódolási formát nem tudok az Excelben beállítani, csak azt, hogy csv-ként mentse. Notepad++ és Ultraeditben elmentettem utf-8-ként, ez esetben a lapon helyesen jelent meg az ékezet (kivéve persze a szó eleji ékezetes nagy betűket), viszont a fájl Excelben való ismételt megnyitásakor olvashatatlan kriksz-krakszok jelentek meg.
A PHP fájlom egyébként utf-8-as.
3

UTF-16 és társai

Poetro · 2010. Nov. 9. (K), 21.05
Az Excel talán UTF-16 BE vagy UCS2 kódolást használ alapértelmezetten. Ez persze nem zárja ki, hogy UTF-8 vagy más kódolású CSV fájlt olvasson. Erre van a Text Import Wizard. Mondjuk kb 6-8 éve nem volt Excel a gépemen, ezt is csak olvastam. Ha nagyobb kontrollt szeretnél az exportálás és importálásban, akkor használj helyette például OpenOffice.org-ot.
4

Bocs, régen volt már az MS

ironwill · 2010. Nov. 9. (K), 21.11
Bocs, régen volt már az MS Office.. úgy rémlett, hogy amikor exportálsz, akkor feldob egy ablakot, ahol választhatsz, többek közt a karakter kódolási beállítások közt.. De akkor mégsem..

Az excel (szerintem) latin-1, latin-2 kódolással dolgzik és ha nincs automatikus lehetőség a kódolás átállítására és szeretnéd, ha bárhonnan olvasható lenne a csv fájl, akkor azt tudod még kipróbálni, hogy a php fájlodnak a karakterkódolását állítod utf-8-ról iso-8859-1/2-re. (ez persze, abban az esetben működhet, ha csak a csv-nek a tartalmát jelenítenéd meg benne, mert a más tartalmat (pl. ékezetes betűk) nagy valószínűség szerint elgányolja)

(update: tényleg rég volt.. Poetro: tényleg, az új office-okhoz új kódolás dukál.. :)

Én ezeket tudom tanácsolni, de lehet, hogy valaki ismer más megoldást is.
8

Na látod,

Nagy Gusztáv · 2010. Nov. 10. (Sze), 08.28
pont ezért kell neked az Open/LibreOffice. Ott egy kis pipával jelezheted, hogy finomhangolni akarod a CSV mentés folyamatát.
5

iconv

Blackfriar · 2010. Nov. 9. (K), 21.28
iconv esetleg nem segítene? Persze ehhez pontosan tudni kéne, milyen kódolással érkezik a csv fájl.
6

ez itt most kopipészt némi

szabo.b.gabor · 2010. Nov. 10. (Sze), 07.39
ez itt most kopipészt némi törléssel, de remélem segít a probléma megoldásában..
  1. //...  
  2. function getCsv(){  
  3.         //.....  
  4.         $separator=isset($_GET['separator']) && $_GET['separator']==','?',':';';  
  5.         $encoding=isset($_GET['encoding']) && $_GET['encoding']=='ISO-8859-2'?'ISO-8859-2':'UTF-8';  
  6.         header("Cache-Control: no-store, no-cache, must-revalidate");  
  7.         header("Cache-Control: post-check=0, pre-check=0", false);  
  8.         header("Pragma: no-cache");  
  9.         header("Content-Type: text/csv; charset=$encoding");  
  10.           
  11.         $name='valami.csv';  
  12.         header("Content-Disposition: inline; filename=$name");  
  13.           
  14.         $out = fopen('php://output''w');  
  15.         $header = array('izé','bigyó');  
  16.         $this->setEncoding($header,$encoding);  
  17.           
  18.         fputcsv($out,$header,$separator);  
  19.         while(/*végigmész a rekordokon*/){  
  20.             //csinálsz ezt azt  
  21.             $row=array('ize','bigyo')  
  22.             $this->setEncoding($row,$encoding);  
  23.             fputcsv($out$row,$separator);  
  24.         }  
  25.         fclose($out);  
  26.     }  
  27.       
  28.     function setEncoding(&$row,$enc='UTF-8'){  
  29.         $enc=$enc=='ISO-8859-2'?'ISO-8859-2':'UTF-8';  
  30.         if($enc=='ISO-8859-2'){  
  31.             foreach($row as &$val){  
  32.                 $val=mb_convert_encoding($val,$enc,'UTF-8');  
  33.             }  
  34.         }  
  35.     }  
7

Hoppá.. most látom, hogy nem

szabo.b.gabor · 2010. Nov. 10. (Sze), 07.41
Hoppá.. most látom, hogy nem erről volt szó, hanem a másik oldalról. sorry :) valahogy rá kell jöjj az encoding-ra és onnan már egyenesben kell, hogy legyél