Php CSV文件中值的Wierd二进制字符串(在包含丹麦语和æ;、ø;和å;-字母的Laravel中导入)

Php CSV文件中值的Wierd二进制字符串(在包含丹麦语和æ;、ø;和å;-字母的Laravel中导入),php,laravel,encoding,utf-8,Php,Laravel,Encoding,Utf 8,我有一个Mime类型的文件:text/csv 我想遍历它并进行一系列字符串操作 我有十亿列和行。但有一个简单的例子: Foo Bar Grød ------------------ 1 2 3 4 5 6 如果我只是直接打印出这些值,而没有做任何事情,那么Laravel会打印这些值(用于标题): 我的代码: foreach( $headers as $entry ){ dump( $entry ); } 输出 Foo Bar b"Grø

我有一个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
foreach( $headers as $entry ){
  dump( utf8_decode( $entry ) );
}

Foo
Bar
Gr?d
如果我只是添加
utf8\u decode
,如下所示:

Foo
Bar
Grød
foreach( $headers as $entry ){
  dump( utf8_decode( $entry ) );
}

Foo
Bar
Gr?d

如何从包含丹麦字母æ、ø和å的所有行中获取实际值?这是标准UTF-8编码的一部分,所以应该是火箭科学

增补1 如果我写:
dd($request['csv\u 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
我不知道这对谁有帮助


如果我(在终端中)写入
文件-I FILENAME.csv
,则它输出:
FILENAME.csv:application/octet-stream;charset=binary

尝试将文件编码更改为
UTF-8
。对于转换,您可以使用文本编辑器,如记事本+++升华文本。将文件转换为
UTF-8
或更高版本的
UTF with BOM
,保存并重试

我假设,由于文件中存在某些字符,php认为该文件是在另一个字符集中编码的(
而不是UTF-8
),或者由于您的数据库编码或获取此csv文件的方式,该文件实际上是在另一个字符集中编码的

这是给我的。使用
解包(“a*”,$entry)


谢谢大家抽出时间!每件小事都有帮助

b”“
只是该
dump
实用程序的惯例。就PHP而言没有区别,PHP没有任何所谓的“二进制字符串”。你根本不需要做什么。如果您想知道字符串的实际编码是什么,请使用
bin2hex
查看它的实际字节表示形式。在代码的后面,我做了一个“in_数组('Grød',$headers);”这就是失败的原因。不管我是否进行utf8_解码,它都会失败。所以那封蹩脚的信一定有什么问题!:-)愚蠢的问题,你在哪里倾销价值?您是否在浏览器中或其他地方看到Gr?d?在浏览器中,是的。所以我写
dump(..)
并重新加载页面(在浏览器中)。如果
in_array
没有找到它,这意味着PHP文件中字符串的编码(即PHP文件的编码)和数组中字符串的编码不同。不起作用。:-/如果我(在终端中)写入:
file-I FILENAME.csv
,则输出:
FILENAME.csv:application/octet-stream;字符集=二进制
。也许这告诉了某人一些事情。尝试用BOMIf转换为UTF8,我使用
UTF8 with BOM
保存,然后它输出:
?Grød
:-/我再次建议,在应用这些神秘的解决方案之前,先看看您使用
bin2hex()
到底在处理什么。