将UTF-16和UTF-8文本的字符串转换为UTF-8

时间:2013-04-07 19:09:20

标签: php encoding utf-8 utf-16

我阅读了很多关于如何将 UTF-16转换为/到UTF-8 的帖子,但没有人建议如果我同时将它们做什么怎么办。我正在尝试使用PHP将具有UTF-16和UTF-8字符的电子邮件正文插入到SQL Server 2008表列(UTF-8)中。

我使用iconv()从UTF-16转换为UTF-8,但正如我所说它还不够,因为它不能处理UTF-8:

$email->description_html = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
                                 $msgNo, 'HTML', $structure, $fullHeader,$clean_email)); 
$email->description      = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
                                 $msgNo, 'PLAIN', $structure, $fullHeader,$clean_email));

我为UTF-16和UTF-8尝试了这个,但它不起作用,给出了数据库错误:

can't convert UTF-16 to UTF-8

$email->description_html= iconv('','UTF-8',$that->getMessageText(
                                $msgNo, 'HTML', $structure, $fullHeader,$clean_email));

我不知道还能做什么,请帮助。

1 个答案:

答案 0 :(得分:1)

不应该是"同时拥有UTF-16和UTF-8"在一个文本字符串中。如果是这种情况,则字符串被破坏。必须有一个指示器,说明使用了哪种编码,并且仅使用此编码。必须信任此指示符才能将字符转换为其他编码。如果它不起作用:责备错误地说明不是真的编码。

至于电子邮件:可能有一个多部分邮件,其中有两个(读取:多个)不同部分,带有两个不同的多部分标题,两者都说明了不同的编码。处理此问题必须通过应用解析多部分邮件的规则来完成,即您不能将整个邮件视为单个字符串,但必须先将这些部分分开 - 然后您对每个部分都有一个完全有效的单一编码情况。 :)