在php中将UTF-16LE转换为UTF-8
我使用了在php中将UTF-16LE转换为UTF-8,php,encoding,iconv,Php,Encoding,Iconv,我使用了iconvphp函数,但有些字符无法正确转换: ... $s = iconv('UTF-16', 'UTF-8', $s); ... $s = iconv('UTF-16//IGNORE', 'UTF-8', $s); ... $s = iconv('UTF-16LE', 'UTF-8', $s); ... $s = iconv('UTF-16LE//IGNORE', 'UTF-8', $s); ... 我也尝试了mb\u convert\u编码功能,但无法解决我的问题 示例文本文件:
iconv
php函数,但有些字符无法正确转换:
...
$s = iconv('UTF-16', 'UTF-8', $s);
...
$s = iconv('UTF-16//IGNORE', 'UTF-8', $s);
...
$s = iconv('UTF-16LE', 'UTF-8', $s);
...
$s = iconv('UTF-16LE//IGNORE', 'UTF-8', $s);
...
我也尝试了mb\u convert\u编码
功能,但无法解决我的问题
示例文本文件:9px.ir/utf8-16LE.rariconv
您可以使用它将编码从UTF-16LE
转换为UTF-8
:
$result = iconv($in_charset = 'UTF-16LE' , $out_charset = 'UTF-8' , $str);
if (false === $result)
{
throw new Exception('Input string could not be converted.');
}
看
我只是想知道中可用的所有代码点是否都在中可用。但我认为这应该适合你的情况
编辑:我无法在自己的盒子上重现该问题,但在上一天,我遇到了以下通知: 注意:iconv()[function.iconv]:错误的字符集,不允许在 看起来并非所有的
iconv
版本都能将UTF-16LE
转换为UTF-8
它可能是一种变通方法,至少在本例中是这样():
您应该在函数的第二个参数中使用
//TRANSLIT
或//IGNORE
,它表示输出字符集。你在第一个论点中用错了
请参阅上的更多详细信息和示例。字符串是一个阿拉伯语句子,大约一半的句子字符没有转换。@ali mzm:无法复制,该文件适用于上面的代码示例。@ali mzm:看起来并非所有iconv版本都支持此功能,可能您遇到了此错误@ali mzm:我添加了一个
mb\u convert\u编码
示例,该示例与iconv
相同。不,我没有得到错误。我得到一个字符串,有些字符转换正确,有些字符转换不正确。@ali mzm:您使用的是//translatit
还是//IGNORE
?如果是这样,请不要这样做,除非你已经找到了原因。如果我尝试使用iconv
或mb\u convert\u编码
和您的数据,我无法重现问题。查看此演示,其中包含您的数据-您是否在输出中也看到了您的问题?
$result = mb_convert_encoding($str , 'UTF-8' , 'UTF-16LE');