【问题标题】:convert string with UTF-16 and UTF-8 text to UTF-8将带有 UTF-16 和 UTF-8 文本的字符串转换为 UTF-8
【发布时间】:2013-04-07 19:09:20
【问题描述】:

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

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

【问题讨论】:

  • 在一个文本字符串中不应该有“同时具有 UTF-16 和 UTF-8”这样的东西。如果是这种情况,则字符串已损坏。必须有一个指示符说明使用了哪种编码,并且仅此编码。必须信任该指标才能将字符转换为另一种编码。如果它不起作用:责备源错误地说明不正确的编码。
  • 谢谢 Sven,在这种情况下,我在同一封电子邮件中有两个编码:用希伯来字符 (UTF-8) 编写的电子邮件,使用防病毒程序扫描,该程序会向其添加电子邮件扩展文本已验证 - 电子邮件扩展(或称其为附件,只是它不完全是附件......)采用 UTF-16 格式(就像 NDR - 自动添加到电子邮件文本的未送达报告扩展)。当我尝试插入数据库(UTF-8)时,我收到一个错误,即字符串是 UTF-16。当我将它作为 UTF-16 处理时,我可以知道有 UTF-8 的字符。
  • 那么你的防病毒程序就坏了。它不应该将具有不同编码的文本添加到电子邮件正文部分。
  • 谢谢 Sven 和 nwellnhof,你们都是对的,没有 UTF-16 和 UTF-8,并且防病毒软件确实返回了 UTF-8。请将您的 cmets 作为答案发布,以便我再次标记为“答案”。

标签: php encoding utf-8 utf-16


【解决方案1】:

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

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

【讨论】:

  • 术语“多部分邮件”是我首先要寻找的术语。这正是我所拥有的!我只是不知道它被称为多部分,所以我无法谷歌它。谢谢!
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多