我阅读了很多关于如何将 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));
我不知道还能做什么,请帮助。
答案 0 :(得分:1)
不应该是"同时拥有UTF-16和UTF-8"在一个文本字符串中。如果是这种情况,则字符串被破坏。必须有一个指示器,说明使用了哪种编码,并且仅使用此编码。必须信任此指示符才能将字符转换为其他编码。如果它不起作用:责备错误地说明不是真的编码。
至于电子邮件:可能有一个多部分邮件,其中有两个(读取:多个)不同部分,带有两个不同的多部分标题,两者都说明了不同的编码。处理此问题必须通过应用解析多部分邮件的规则来完成,即您不能将整个邮件视为单个字符串,但必须先将这些部分分开 - 然后您对每个部分都有一个完全有效的单一编码情况。 :)