[英]Convert UTF-16LE to UTF-8 in php
我使用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_convert_encoding
函數,但無法解決我的問題。
示例文本文件:9px.ir/utf8-16LE.rar
iconv
支持UTF-16LE
編碼。
您可以使用它來將編碼從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
文檔。
我只是想知道UTF-16LE
中可用的所有代碼點是否都在UTF-8
中可用。 但我認為這應該適合你的情況。
編輯:我無法在我自己的一個盒子上重現這個問題,但在另一個盒子上我遇到了這個通知:
注意: iconv() [function.iconv]: 錯誤的字符集,從
UTF-16LE' to
UTF-8' 的轉換是不允許的...
看起來並非所有iconv
版本實際上都可以將UTF-16LE
轉換為UTF-8
。
使用mb_convert_encoding
Docs可能是一種解決方法,至少在這種情況下是這樣( Demo ):
$result = mb_convert_encoding($str , 'UTF-8' , 'UTF-16LE');
您應該在函數的第二個參數中使用//TRANSLIT
或//IGNORE
,它表示輸出字符集。 您在第一個參數中錯誤地使用了它。
請在https://www.php.net/manual/en/function.iconv.php查看更多詳細信息和示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.