php - 使用 PHP 将 UCS-2 文件转换为 UTF-8

标签 php encoding

我有一个客户端提供的 CSV 文件,必须使用 PHP 对其进行解析并插入到数据库中。

在将数据插入数据库之前,我想将其转换为 UTF-8,但我似乎找不到方法。

这是我试图检测文件编码的结果:

$ enca -d -L zh ./artigos.txt 
    ./artigos.txt: Universal character set 2 bytes; UCS-2; BMP
    CRLF line terminators
    Byte order reversed in pairs (1,2 -> 2,1)

我尝试使用 iconv 函数,但它搞乱了转换并显示了与原始字符不同的结果。

文件第一行(base64编码):

IgAwADMAMQAxADkAIgAsACIANwAzADEAMwA0ADYAMgA2ADQAMAAwADEANQAiACwAIgBBAGcAcgBhAGYAYQBkAG8AcgAgAFIAYQBwAGkAZAAgADkAIABIAGUAYQB2AHkAIABEAHUAdAB5ACIALAAiAEEAZwByAGEAZgBvACAAOQAvADgALAAgADkALwAxADAALAAgADkALwAxADIALAAgADkALwAxADQAIgAsACIAMQAxADAAZgBsAHMAIgAsACIAIgAsACIAIgAsACIAIgAsACIAMAAzADEAMQA5AC4AagBwAGcAIgAsACIAIgAsACIAMQAsADIAMAAiACwAIgA1ADkALAA5ADAAIgAsACIAMgAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIARgBhAGwAcwBlACIADQAK

最佳答案

Microsoft Excel CSV 通常采用 Little Endian 编码(我花了很长时间才发现)。 如果您想将它们与 fgetcsv 或类似函数一起使用,您应该先将文件转换为 UTF-8。

我做了以下事情:

$str = file_get_contents($file);
$str = mb_convert_encoding($str, 'UTF-8', 'UCS-2LE'); 
file_put_contents("converted_".$file, $str);

关于php - 使用 PHP 将 UCS-2 文件转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942900/

相关文章:

javascript - 需要帮助使用 Javascript 解密 AES 加密字符串(使用 crypto-js)

php - 我想在 Mysql 中插入印地语字符串并提供对印地语语言名称字段的搜索

Python CGI 脚本不会在 Linux 上打印希伯来语

PHP MySQL - 需要显示文件列表及其文件大小、格式。重新声明函数错误

php - 添加列时 SQL 中的多个 CASE

php - 从许多表中删除数据的正确方法是什么?

javascript - 使用laravel在angularjs和后端上传多个文件(没有表单标签)

java - Spring MVC Tomcat 编码 UTF-8

encoding - 使用 ffmpeg 进行多比特率编码

php - 在 Laravel 中搜索关系和日期