При попытке импортировать файл CSV арабские символы исчезают при запуске fgetcsv
, но когда я печатаю вывод из fopen
, арабские символы отображаются нормально. Странно то, что это происходит только в нашей производственной среде, а не в моей среде разработки, где fgetcsv
прекрасно читает арабские символы. Есть ли какие-то настройки сервера, которые неправильно установлены в рабочей среде?
fgetcsv() не читает арабские символы
comment
какая кодировка файла csv?
- person user4035   schedule 17.08.2013
comment
Не могу воспроизвести: создал тестовый файл на арабском языке в utf8. fgetcsv работал правильно.
- person user4035   schedule 17.08.2013
comment
Можете выложить файл?
- person pguardiario   schedule 17.08.2013
comment
В файле CSV используется кодировка UTF-8, но, как указал Лафор, проблема заключалась в том, что языковой стандарт не был правильно установлен в рабочей среде.
- person Cole Marshall   schedule 20.08.2013
Ответы (1)
fgetcsv()
делает предположения о кодировке файла на основе локали системы. Как указано в руководстве по PHP:
Эта функция учитывает настройку локали. Если
LANG
, например.en_US.UTF-8
, файлы в однобайтовой кодировке читаются этой функцией неправильно.
Возможно, вы захотите сравнить настройки локали на двух ваших машинах и либо навсегда изменить их на одной из них, либо использовать что-то вроде setlocale(LC_ALL, 'ar_AE.utf8')
(второй аргумент, очевидно, будет зависеть от кодировки вашего файла) перед вашим fgetcsv()
.
person
lafor
schedule
16.08.2013
Это неприменимо, потому что арабский язык никогда не будет однобайтовой кодировкой.
- person pguardiario; 17.08.2013
@pguardiario Я знаю, но языковой стандарт системы может быть основан на UTF-16.
- person lafor; 17.08.2013
Спасибо! Локаль, по-видимому, была неправильно установлена на рабочем сервере. Использование
setlocale(LC_ALL, 'en_US.UTF-8')
до fgetcsv
помогло.
- person Cole Marshall; 20.08.2013