13

php関数を使用iconvしていますが、一部の文字が正しく変換されません。

...
$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

4

2 に答える 2

24

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' toUTF-8'からの変換は許可されていません...

すべてのiconvバージョンが実際にに変換できるわけではないようUTF-16LEですUTF-8

mb_convert_encoding代わりにドキュメントを使用することは回避策かもしれませんが、少なくともこの場合は(デモ):

$result = mb_convert_encoding($str , 'UTF-8' , 'UTF-16LE');
于 2011-08-08T09:56:18.490 に答える
0

関数の2番目の引数で、//TRANSLITまたはを使用する必要があります。これは、出力文字セットを表します。最初の引数で誤って使用しました。//IGNORE

https://www.php.net/manual/en/function.iconv.phpで詳細と例を参照してください。

于 2021-04-22T13:31:07.920 に答える