代码之家  ›  专栏  ›  技术社区  ›  Zeth

csv文件中值的wierd二进制字符串(以包含丹麦语和-字母的拉维形式导入)

  •  0
  • Zeth  · 技术社区  · 6 年前

    我有一个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"
    

    现在问题出在第三行了。这是一个 binary-string

    但我要的是 b" " . 所以我想要这样的输出:

    Foo
    Bar
    Grød
    

    如果我加上 utf8_decode ,像这样:

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

    ?!

    如何从包含丹麦语和字母的所有行中获取实际值?它是标准utf-8编码的一部分,所以应该是火箭科学。

    添加1

    如果我写作: 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

    0 回复  |  直到 6 年前
        1
  •  1
  •   dparoli    6 年前

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

    我想,由于文件中有一些字符,php认为文件是用另一个字符集编码的( not UTF-8 ,或者文件是 真正地 由于您的数据库编码或获取此csv文件的方式而在其他字符集中编码。

        2
  •  0
  •   Zeth    6 年前

    This solved 这是给我的。使用 unpack( "a*", $entry ); .

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

    推荐文章