0

我阅读了很多关于如何将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));

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

4

1 回答 1

1

在一个文本字符串中不应该有“同时具有 UTF-16 和 UTF-8”这样的东西。如果是这种情况,则字符串已损坏。必须有一个指示符说明使用了哪种编码,并且仅此编码。必须信任该指标才能将字符转换为另一种编码。如果它不起作用:责备源错误地说明不正确的编码。

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

于 2013-04-08T20:56:25.520 回答