PHP: создание CSV-файла в кодировке Windows

#csv #encode #fputcsv

#csv #кодировать #fputcsv

Вопрос:

я создаю csv-файлы с помощью php. Чтобы записать данные в мой csv-файл, я использую php-функцию «fputcsv».

в этом проблема: я могу нормально открыть созданный файл с помощью Excel. Но я не могу импортировать файл в shopsystem (в данном случае «shopware»). В нем говорится что-то вроде «данные не могут быть прочитаны».

И теперь приходит подсказка:

Если я открою созданный файл и выберу «сохранить как» и выберите «CSV (через запятую)» в поле тип, этот файл можно импортировать в shopware. Я кое-что прочитал о функции php «mb_convert_encoding», которую я использовал для кодирования данных, но это не смогло решить проблему.

Я буду очень рад, если вы сможете мне помочь.

Спасибо.

Ответ №1:

Спасибо за ваш вклад. Я решил эту проблему, заменив fputcsv на fwrite. Затем мне просто нужно было добавить » r n» (спасибо wmil) в конец строки, и сгенерированный файл может быть прочитан shopware.

Очевидно, что функция fputcsv использует n, а не rn в качестве символа EOL.

Ответ №2:

Я думаю, вы не можете установить encode с помощью fputcsv. Однако fputcsv обращается к настройкам локали, которые вы можете изменить с помощью setlocale.

Возможно, вы могли бы отправить свой файл непосредственно в браузер пользователя и использовать изменение contenttype и charset с функцией заголовка.

Комментарии:

1. я не устанавливаю тип кодирования с помощью fputcsv. я просто кодирую значения входного массива, который fputcsv принимает в качестве аргумента. файл предназначен не для загрузки, а для cronjob, который инициирует импорт в shopware.

Ответ №3:

На этот вопрос нельзя ответить, не зная больше о вашей системе. Скорее всего, это не имеет ничего общего с кодировкой символов. Вероятно, проблема в неправильном количестве столбцов или неправильных заголовках столбцов.

Если это проблема с кодировкой символов, лучше всего:

 $new_str = mb_convert_encoding($str, 'Windows-1252', 'auto');
  

Также заканчивайте новые строки символом rn, а не просто n .

Если это не сработает, вам нужно будет проверить документацию по программному обеспечению.

Комментарии:

1. номера столбцов верны в каждой строке, я только что проверил. к сожалению, предложенная кодировка не решила проблему. я не имею никакого влияния на символ EOL, поскольку он записывается автоматически fputcsv. какие программные документы вы имеете в виду?