У меня есть сценарий PHP, который читает из файла CSV, файл в формате UTF-8 и код ниже обрабатывает его как ASCII. Как я могу изменить код для чтения файла как UTF-8?
if (($handle = fopen("books.csv", "r")) === FALSE)
throw new Exception("Couldn't open books.csv");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
[РЕДАКТИРОВАТЬ]
Одна из проблем моего текущего кода заключается в том, что первое значение в первой строке всегда имеет три байта, которые идентифицируют файлы UTF-8, добавленные в начале. Итак, я думаю, что решение, которое работает со значением по значению или строка за строкой, может быть недостаточно хорошим?
Используйте fgets (), чтобы получить всю строку в переменной $ date, затем mb_convert_encoding () преобразовать кодировку, затем str_getcsv () преобразовать строку в массив.
if (($handle = fopen("books.csv", "r")) === FALSE)
throw new Exception("Couldn't open books.csv");
$data = "";
// get file all strin in data
while (!feof($handle)) {
$data .= fgets($handle, 5000);
}
// convert encoding
$data = mb_convert_encoding($data, "UTF-8", "auto");
// str_getcsv
$array = str_getcsv($data);
Других решений пока нет …