Странная двоичная строка для значений в CSV-файле (импорт в Laravel, содержащий датские буквы, ø и å) - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл MIME-типа: text/csv.

Я хочу пройтись по нему и выполнить кучу манипуляций со строками.

У меня миллиард столбцов и строк.Но простой пример:

Foo    Bar    Grød
------------------
1      2      3
4      5      6

Если я просто распечатаю значения сразу, не сделав ничего, то Laravel напечатает это (для заголовков):

Мой код:

foreach( $headers as $entry ){
  dump( $entry );
}

Вывод

Foo
Bar
b"Grød"

Теперь проблема в третьей строке.Это двоичная строка

Но я хочу 'что находится внутри b" и ".Поэтому я хочу вывод, как это:

Foo
Bar
Grød

Если я просто добавлю utf8_decode, например:

foreach( $headers as $entry ){
  dump( utf8_decode( $entry ) );
}

Foo
Bar
Gr?d

?!

Как мне получитьфактические значения из всех строк, которые содержат буквы anish, ø и å на датском языке?Это часть стандартной кодировки UTF-8, так что это должно быть ракетостроение.

Addition1

Если я напишу: dd( $request['csv_file'] ), то вы получите следующее:

-test: false
-originalName: "FILENAME.csv"
-mimeType: "text/csv"
-error: 0
#hashName: null
path: "/private/var/folders/hl/r1syq9ys4z30lw08b6g8hhnh0000gn/T"
filename: "phpzYwY9I"
basename: "phpzYwY9I"
pathname: "/private/var/folders/hl/r1syq9ys4z30lw08b6g8hhnh0000gn/T/phpzYwY9I"
extension: ""
realPath: "/private/var/folders/hl/r1syq9ys4z30lw08b6g8hhnh0000gn/T/phpzYwY9I"
aTime: 2019-02-20 15:31:10
mTime: 2019-02-20 15:31:10
cTime: 2019-02-20 15:31:10
inode: 12891860254
size: 2282762
perms: 0100600
owner: 501
group: 20
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false

Я не знаю, поможет ли это кому-нибудь.

И если я (в терминале) напишу file -I FILENAME.csv, то он выдаст: FILENAME.csv: application/octet-stream; charset=binary

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Это решено это для меня.Использование unpack( "a*", $entry );.

Спасибо за ваше время всем!Каждая мелочь помогла.

0 голосов
/ 20 февраля 2019

Попробуйте изменить кодировку файла на UTF-8.Для преобразования вы можете использовать текстовый редактор, такой как Блокнот ++ или Sublime Text .Преобразуйте файл в UTF-8 или лучше в UTF with BOM, сохраните его и повторите попытку.

Я полагаю, что из-за присутствия в файле некоторого символа php считает, что файл закодирован в другой кодировке (not UTF-8), или файл действительно закодирован вдругой кодировке из-за вашей кодировки базы данных или того, как вы получили этот CSV-файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...