PHP操作CSV文件的编码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP操作CSV文件的编码问题相关的知识,希望对你有一定的参考价值。

原CSV文件是unicode编码
php直接读取显示乱码。
我需要的功能是:通过PHP修改CSV文件里面的内容.
我目前的做法是:
1.先用editplus存为UTF-8格式,这时候用CSV打开为乱码,
2.PHP能正确读出并且修改。
3.用editplus将修改后的CSV文件转成unicode
4.此unicode文件可以成功导入系统.

问题是有没有方法让第1、3两步用php实现,不用人工修改?

参考技术A unicode -> utf-8
iconv("UCS-2","UTF-8","你的内容");

PHP - 从 AWS 存储桶下载的文件的文件编码问题

【中文标题】PHP - 从 AWS 存储桶下载的文件的文件编码问题【英文标题】:PHP - file encoding issue with files downloaded from AWS bucket 【发布时间】:2016-05-30 09:54:24 【问题描述】:

在 PHP 中使用以下代码,我正在尝试从 AWS 存储桶下载文件。 我能够成功下载文件,但下载的文件不可读。文件编码设置为 ANSI。

在 AWS 存储桶中,该文件的元数据如下 内容类型:文本/csv;%20charset=utf-16le 内容编码:gzip



    require '/aws/aws-autoloader.php'; 
    use Aws\S3\S3Client;

    // Instantiate the S3 client with your AWS credentials
    $key = [access_key];
    $secret = [secret_key];

    $client = S3Client::factory(array(
        'credentials' => array(
            'key'    => $key,
            'secret' => $secret
        )
    ));


    $bucket = [bucket_name];
    $file=[bucket_file_location];
    $fileSaveAs = [download_file_location];

    // Get an object using the getObject operation & download file
    $result = $client->getObject(array(
        'Bucket' => $bucket,
        'Key'    => $file,
        'SaveAs' => $fileSaveAs
    ));

谁能解释一下,这里出了什么问题?

编辑 1: 当我直接从 AWS 存储桶下载此文件时,它下载得很好。

编辑 2: 我刚刚注意到下载的 CSV 文件总是 1KB 大小。

下载的文件损坏模式: `‹½”ÍJÃ@F¿µOÑPi+h]V[Tð§hâFÚ4HÐjI¬Ð—W¿¤

编辑 3: 所有这些文件都是使用 gsutil 从 Google play bucket 传输的

【问题讨论】:

您获得的内容可能已被压缩(如Content-Encoding 中所述)? gzdecode(file_get_contents($fileSaveAs)) 是否返回正确的内容? 是的,这解决了我的问题 【参考方案1】:

从 AWS 存储桶接收的文件是 gzip。 (内容编码:gzip)

所以需要使用gzdecode函数解码gzip压缩字符串

以下代码解决问题



    $content = gzdecode(file_get_contents($fileSaveAs));
    file_put_contents($fileSaveAs,$content);

【讨论】:

@Zudwa:感谢您的解决方案

以上是关于PHP操作CSV文件的编码问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP fputcsv 编码

CSV文件乱码展示(编码格式问题)

如何检测上传的csv文件的编码

php 导出excle的.csv格式的数据时乱码问题

PHP - 从 AWS 存储桶下载的文件的文件编码问题

解决utf8编码的php生成csv打开乱码的问题