微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在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]);
但仍然没有成功……

解决方法:

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐