Форумы портала PHP.SU » » Кодировки и все смежное » Сохранение cvs в utf8 без BOM

Страниц (1): [1]
 

1. Telnet - 06 Ноября, 2015 - 15:34:43 - перейти к сообщению
Всем привет.
Нужно сохранять файл cvs обязательно в кодировке utf8 без BOM
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. /**
  5.  * Класс для работы с csv-файлами
  6.  * @author дизайн студия ox2.ru  
  7.  */
  8. class CSV {
  9.  
  10.     private $_csv_file = null;
  11.  
  12.     /**
  13.      * @param string $csv_file  - путь до csv-файла
  14.      */
  15.     public function __construct($csv_file) {
  16.         $handle = fopen($csv_file, "w");
  17.         if($handle){
  18.             fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
  19.             $this->_csv_file = $csv_file;
  20.         }else{
  21.             throw new Exception("Файл ".$csv_file." не найден");
  22.         }
  23.     }
  24.  
  25.     public function setCSVLine(Array $csv) {
  26.         //Открываем csv для до-записи,
  27.         //если указать w, то  ифнормация которая была в csv будет затерта
  28.         $handle = fopen($this->_csv_file, "a");
  29.         fputcsv($handle, $csv, ";"); //Записываем массив данных одной строкой, 3-ий параметр - разделитель поля
  30.         fclose($handle); //Закрываем
  31.     }    
  32. }
  33.  
  34. ?>
  35.  


Сначало было без fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF)); так писало в windows 1251, потом в нете нашел fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF)); поставил теперь пишется в utf8 с BOM, а нужно без BOM,
Прошу помочь разобраться.
2. Мелкий - 06 Ноября, 2015 - 15:48:12 - перейти к сообщению
Telnet пишет:
в кодировке utf8 без BOM

И сами BOM и записываете. Странные люди.

Если fput передаёте utf8, то utf8 и будет записано. Остальное проблемы читателя, т.к. CSV предполагает, что писатель и читатель согласуют кодирование данных как-нибудь сами, без участия непосредственно файла данных.
3. esterio - 06 Ноября, 2015 - 17:04:53 - перейти к сообщению
Telnet пишет:
fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));

Метка BOM
4. Telnet - 07 Ноября, 2015 - 11:42:22 - перейти к сообщению
Спасибо я знаю что это
fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
метка BOM
я ее для эксперимента добавил

если ее удалить то файл записывается в кодировке windows-1251
и приходится его каждый раз его перекодировать.

Так нужно перед записью перекодировать все в utf8
у меня там просто много полей в этот файл пишут нужно перед записью каждое поле перекодировать?
5. Telnet - 07 Ноября, 2015 - 14:40:05 - перейти к сообщению
Все разобрался короче каждое поле которое у нас не в utf 8 привожу к utf-8

и теперь все сохраняет в UTF-8
проблема как я понял была в том что не которые данные файл читал с инета а они видимо были как раз в windows-1251
6. esterio - 09 Ноября, 2015 - 13:09:18 - перейти к сообщению
Если нету меткы и все на латинице то некоторые редакторы показивають как cp1251 ибо латиница что там что в UTF-8 индентична

 

Powered by ExBB FM 1.0 RC1