php读取文件编码格式unicode,如何在PHP中读取unicode文本文件?

我在PHP脚本中读取文本文件(以Unicode UTF16-LE保存)时遇到一些麻烦.

我的PHP脚本(由于某些原因)以UTF-8保存.

这是我的代码:

$lines = file("./somedir/$filename");

for ($i=0; $i < count($lines); $i++) {

$lines[$i] = iconv("Unicode", "UTF-8", $lines[$i]); // converting to UTF8

}

echo "[0]:".$lines[0]; // outputs CORRECT text (like "This is the first line")

echo "[1]:".$lines[1]; // outputs something like çæ¤ææ¬çææ¸ææ°ã

有什么好主意吗?

我检查了计数值($lines),这是完全正确的……

谢谢.

编辑:

好的,所以我尝试了iconv(“UTF-16”,“UTF-8”,$lines [$i]);

我也试过iconv(“UTF-16LE”,“UTF-8”,$lines [$i]);

但仍然没有成功……

解决方法:

PHP的file函数无法读取UTF-16LE编码的文件.它需要拆分行结束字符,但PHP只支持单字节序列,UTF-16LE是一种多字节可变长度编码,与编码到文件函数中的行拆分程序不兼容.

所以你使用错误的功能来完成工作.这很简单就是答案.这里没有iconv问题,只是使用文件.

相反,您需要将文件读入缓冲区,从缓冲区中获取一行,然后重新编码为UTF-8.

首先要了解该文件中使用的行分隔符.由于PHP的文件函数(以及字符串函数以及字符串本身)是基于二进制的,因此采用string和strpos函数形式的二进制序列来定位它.

然后逐行从缓冲区中分割出来(如果文件用完字节,则再次从文件中重新填充缓冲区)然后你可以使用手册页中概述的iconv(或者你的问题,你的示例代码不是看错了,只要注意你使用正确的参数,以便编码是正确的).

标签:php,unicode,file-io

来源: https://codeday.me/bug/20190725/1535471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值