簡體   English   中英

在 php 中將 UTF-16LE 轉換為 UTF-8

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM