【发布时间】:2017-10-06 22:38:42
【问题描述】:
我正在尝试在创建过程中使用 stream_filter_append() 将我正在创建的文件转换为 UTF-16LE。但是,我只是从输出中得到乱码数据。下面的示例代码
$fp = fopen($filename, "w");
fwrite($fp, chr(255) . chr(254));
$rows = array(array('Состав Gerber', 'Секреты производства'), array('Полезные аксессуары', 'Инструменты'));
foreach($rows as $row)
{
fputcsv($fp, array_values($row));
}
stream_filter_append($fp, 'convert.iconv.UTF-8/UTF-16LE', STREAM_FILTER_WRITE);
fclose($fp);
在通过 fputcsv 传递数据之前,我不能对数据使用 iconv,因为 fputcsv 不处理 UTF-16。 saving CSV with UTF-16BE encoding in PHP
我知道我可以选择创建文件,然后读取并转换它。甚至创建一个自定义 fputcsv 来处理 UTF-16。但是我想知道在使用 stream_filter_append() 的初始文件创建过程中这是否可能。
【问题讨论】:
-
我不敢相信在发现这一点之前我做了多少测试,但是为什么你会认为在写入数据之后 将过滤器附加到流中会影响数据你已经写了?编写 BOM 后将其移至该行。
-
是的,就是这样,stream_filter_append() 的位置不正确。谢谢!