【问题标题】:Readind utf8 encoded text file读取 utf 8 编码的文本文件
【发布时间】:2016-03-13 11:40:15
【问题描述】:

我有一个从 utf8 编码的文本文件中读取数据的脚本。它使用fgetc() 一个一个地读取字符。当它读取简单的 ascii 字符时很好,但是当涉及到 š、č、ž... 时,它无法正常工作。简化后的代码如下所示:

$file = fopen($path);
$char = fgetc($file);
while( $char !== false) {
    $char = fgetc($file);
    fwrite(STDOUT, $char);
}

我尝试使用

header('Content-type: text/plain; charset=utf-8');

在脚本的开头,但它仍然不起作用。我也尝试使用utf8_encode($char) 或utf8_decode($char),但没有帮助。是否有任何简单的解决方案如何读取 utf8 字符并将它们写入输出?

更新:

问题是特殊字符保存在两个索引中,所以当我调用一个 fgetc 时,我没有得到整个字符。我现在的解决方案是,当我得到一个序号大于 127 的字符时,我再次调用 fgetc 并从 fgetc 中的这两个值创建一个字符串,然后我可以正确地 fwrite 加载的特殊字符。也许这不是最好的解决方案,但我想不出更好的办法。

【问题讨论】:

  • 什么不能正常工作?
  • 问题是特殊字符保存在两个索引中,所以当我调用一个fgetc 时,我没有得到整个字符。我现在的解决方案是,当我得到一个序号大于 127 的字符时,我再次调用fgetc 并从fgetc 的这两个值中创建一个字符串,然后我可以正确地fwrite 加载特殊字符。也许这不是最好的解决方案,但我想不出更好的办法。
  • 请使用该信息更新您的问题。我有个想法可以帮到你
  • 是否可以读取整个文件?如果是这样,mb_* 函数将允许您一次从字符串中获取单个字符。我不确定 PHP 是否有“从文件中读取一个多字节字符”的方法。

标签: php utf-8


【解决方案1】:

你是否已经在循环之前设置了 $char ?

while( $char !== false)

否则,您将永远不会启动 while 循环,这可能是问题,因为您永远不会调用 $char = fgetc($file);

【讨论】:

  • 我忘记将它添加到示例中,感谢您的注意。
  • 好吧,在这种情况下,您为什么不使用 file_get_contents 将整个文件作为字符串读取并尝试此处提供的方法:stackoverflow.com/questions/2236668/…
  • 我正在寻找一种解决方案,让我的脚本可以按照现在的方式运行 - 一个接一个地读取字符,我不想加载整个文件。
猜你喜欢
  • 2013-07-04
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多