Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] ustawienie kodowania unicode dla tworzonego pliku
Forum PHP.pl > Forum > PHP
marcinek37
Mam kod:
  1. header('Content-disposition: attachment; filename=plik.csv');
  2. header("Content-type: text/html");


chciałbym, aby tworzył się on z kodowaniem UNICODE, a nie UTF-8, bo dopiero wtedy jest prawidłowo czytany przez Excell. Dowiedziałem się tego dzięki programowi EditPlus, w którym programuję. Jest tam opcja zmiany kodowania i gdy wykonam powyższej zmiany, Office czyta plik bez problemów wraz ze wszystkimi znakami specjalnymi.

dodaję screena z EditPlus: http://files.tinypic.pl/i/00391/ojrflttyghy5.png
Spawnm
  1. header('Content-Type: text/html; charset=unicode');

Możliwe że jeszcze dane będzie trzeba przepuścić przez iconv
marcinek37
przeanalizowałem działanie Office 2010 i żeby pokazywały się polskie znaki, a także greckie, wartości nie mają być otoczone cudzysłowem, a separatorem ma być tabulator, tak też robię:

  1. <?
  2. echo'Łódź Kraków ?'; // ostatni znak to grecka gamma, ale forum go przerabia na pytajnik
  3. header('Content-disposition: attachment; filename='.date('Y-m-d', time()).'.csv');
  4. header('Content-Type: application/csv; charset=UTF-16LE');
  5. header("Content-Transfer-Encoding: charset=UTF-16LE");
  6. ?>


gdy utworzy się plik i otworzę go w Excelu, pokazują się same krzaczki. Gdy otworzę ten plik w EditPlus i wybiorę typ kodowania na Unicode (przynajmniej w tym programie tak to się nazywa), a następnie otworzę plik .csv, wszystko działa jak należy

a zatem jedyny problem stanowi ustawienie kodowania dla pliku

proponuję odpalić kod i obejrzeć plik .csv pod Office 2010

szukałem gotowych skryptów, ale żaden nie działa jak powinien
Crozin
UTF-8 to konkretne kodowanie zestawu znaków Unicode. Nie ma czegoś takiego jak "kodowanie Unicode". O ile dobrze pamiętam Excel oczekuje danych zapisanych w kodowaniu UTF-16, nie UTF-8. Nie pamiętam tylko czy UTF-16BE czy UTF-16LE (raczej to drugie).

PS. Włącz sobie wyświetlanie błędów, bo kod który pokazałeś rzuca ich kilka.
marcinek37
tak, to już wiem, ale w editplus było takie nazewnictwo
jak widzisz, w kodzie użyłem charset=UTF-16LE, ale nic ono nie dało

próbowałem również z UTF-16, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE

==================
edit

$text = iconv('UTF-8', 'UTF-16', $text);
to rozwiązuje problem wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.