【问题标题】:Translating ISO-8859-1 to UTF-8 problem将 ISO-8859-1 转换为 UTF-8 问题
【发布时间】:2011-03-02 20:22:19
【问题描述】:

我的一个项目从网络上提取一个文档并阅读它。本文档由第三方提供,不会更改(内容会更改,但格式和其他内容不会更改)。 问题是该文档包括从 Word 中复制和粘贴的内容,即 UTF-8,但是该文档以 ISO-8858-1 编码,因此这些字符以“?”的形式保存到数据库中。

如果我跳过文本,然后用 UTF-8 重新编码,而不是得到智能引号和破折号,我只会得到两个垃圾字符。

如何将这个带有 UTF-8 字符的 ISO-8859-1 文档转换回 UTF-8,以便它可以像最初创建的那样显示?

【问题讨论】:

    标签: php utf-8 iso-8859-1


    【解决方案1】:
    $fixed = mb_convert_encoding($broken, "UTF-8", "ISO-8859-1");
    

    不知道它是否能正确处理嵌入在 8859 中的 UTF-8,但这是“正常”的处理方式。手册页here。试一试,看看事情是否变得更干净或更严重。

    【讨论】:

    • 颠倒第二个和第三个参数的顺序,这样就可以解决了。
    • 使用 mb_convert_encoding($broken, "ISO-8859-1", "UTF-8") 解决了我的问题
    【解决方案2】:

    我在这里找到了解决方案:PHP: Problems converting "’" character from ISO-8859-1 to UTF-8

    服务器声称它提供的是 ISO-8859-1,但实际上是 Windows-1252,它可以毫无问题地转换为 UTF-8。

    【讨论】:

      【解决方案3】:

      幸运的是,ISO 8859-1 是 8 位透明的。因此,您可以只使用iconvmb_convert_encodingutf8_encode 解码内容。

      我不确定“我通过文本”是什么意思,但如果这确实是指定为 ISO 8859-1 的 UTF-8,请尝试消除所有中间文本操作。如果仍然失败,请提供(短)输入文档的示例。有可能它实际上并不是指定为 ISO 8859-1 的 UTF-8。

      【讨论】:

      • 通过传递文本意味着我正在使用 mb_convert_encoding、iconv 或 utf8_encode,它不起作用。
      • @Malfist 好吧,比输入的不是 ISO8859-1
      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 2014-04-30
      • 1970-01-01
      • 2019-02-21
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多