【发布时间】: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 是否有“从文件中读取一个多字节字符”的方法。