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..

//...
function getCsv(){
		//.....
		$separator=isset($_GET['separator']) && $_GET['separator']==','?',':';';
		$encoding=isset($_GET['encoding']) && $_GET['encoding']=='ISO-8859-2'?'ISO-8859-2':'UTF-8';
		header("Cache-Control: no-store, no-cache, must-revalidate");
		header("Cache-Control: post-check=0, pre-check=0", false);
		header("Pragma: no-cache");
		header("Content-Type: text/csv; charset=$encoding");
		
		$name='valami.csv';
		header("Content-Disposition: inline; filename=$name");
		
		$out = fopen('php://output', 'w');
		$header = array('izé','bigyó');
		$this->setEncoding($header,$encoding);
		
		fputcsv($out,$header,$separator);
		while(/*végigmész a rekordokon*/){
			//csinálsz ezt azt
			$row=array('ize','bigyo')
			$this->setEncoding($row,$encoding);
			fputcsv($out, $row,$separator);
		}
		fclose($out);
	}
	
	function setEncoding(&$row,$enc='UTF-8'){
		$enc=$enc=='ISO-8859-2'?'ISO-8859-2':'UTF-8';
		if($enc=='ISO-8859-2'){
			foreach($row as &$val){
				$val=mb_convert_encoding($val,$enc,'UTF-8');
			}
		}
	}
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