gpt4 book ai didi

php - 如何在 PHP 中读取 unicode 文本文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:11 27 4
gpt4 key购买 nike

我在读取 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 çæ¤ææ¬çææ¸ææ°ã

有什么想法吗?我检查了 count($lines) 的值,它完全正确......谢谢。

编辑:
好的,所以我尝试了 iconv("UTF-16", "UTF-8", $lines[$i]);
我还尝试了 iconv("UTF-16LE", "UTF-8", $lines[$i]);
但是还是没有成功...

最佳答案

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

所以你在工作中使用了错误的函数。答案就这么简单。不是 iconv 是这里的问题,而只是使用 file

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

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

然后从缓冲区中逐行拆分(如果字节用完,则从文件中重新填充缓冲区)然后您可以使用手册页中概述的iconv(或你的问题,你的示例代码看起来没有错,只要注意你使用正确的参数,这样编码就正确了)。

关于php - 如何在 PHP 中读取 unicode 文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15092764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com