[英]How do I write UTF-8 data to a UTF-16LE file using PHP?
给定PHP中的一串UTF-8数据,我该如何将其转换并保存到UTF-16LE文件中(该特定文件恰好是发给Indesign的-放置为带标签的文本文档)。
数据:
$copy = "<UNICODE-MAC>\n";
$copy .= "<Version:8><FeatureSet:InDesign-Roman><ColorTable:=<Black:COLOR:CMYK:Process:0,0,0,1>>\n";
$copy .= "A bunch of unicode special characters like ñ, é, etc.";
我正在使用以下代码,但无济于事:
file_put_contents("output.txt", pack("S",0xfeff) . $copy);
您可以使用iconv
:
$copy_utf16 = iconv("UTF-8", "UTF-16LE", $copy);
file_put_contents("output.txt", $copy_utf16);
请注意,UTF-16LE不包含字节顺序标记,因为字节顺序定义明确。 要生成BOM,请改用"UTF-16"
。
另外,您可以使用mb_convert_encoding()
,如下所示:
$copy_UTF16LE = mb_convert_encoding($copy,'UTF-16LE','UTF-8');
使用以下代码,我找到了一个解决方案:
此函数更改字节顺序(来自http://shiplu.mokadd.im/95/convert-little-endian-to-big-endian-in-php-or-vice-versa/ ):
function chbo($num) {
$data = dechex($num);
if (strlen($data) <= 2) {
return $num;
}
$u = unpack("H*", strrev(pack("H*", $data)));
$f = hexdec($u[1]);
return $f;
}
与utf-8到utf-16LE转换一起使用时,它将创建一个可在indesign上使用的文件:
file_put_contents("output.txt", pack("S",0xfeff). chbo(iconv("UTF-8","UTF-16LE",$copy));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.