【问题标题】:Encoding conversions from cp1255 to UTF-8从 cp1255 到 UTF-8 的编码转换
【发布时间】:2017-05-23 13:05:50
【问题描述】:

我在旧数据库中有以下编码的希伯来语字符串:

éçìéó àú ùîåàì æåñîï äòåáã á÷áåöä îòì 50 ùðä

用于解码此字符串的 ASP 代码如下:

function Get_RightHebrew(ByVal sText)
    Dim i
    Dim sRightText

    if isNull(sText) then
        sRightText = ""
    else
        For i = 1 To Len(sText)
            If (AscW(Mid(sText, i, 1)) >= 1488 And AscW(Mid(sText, i, 1)) <= 1514) Then
                sRightText = sRightText & Chr(AscW(Mid(sText, i, 1)) - 1264)
            else
                sRightText = sRightText & Mid(sText, i, 1)
            End If
        Next
    end if

    Get_RightHebrew = sRightText

End Function

我正在寻找一个等效的 PHP 函数来将字符串转换为正确的 UTF-8

【问题讨论】:

  • 我无法将您的代码从 ASP 转换为 PHP,但您可以使用 PHP 的 mb_convert_encoding() 函数。您需要将您的 PHP 文件保存为 UTF-8 不带 BOM。
  • BOM 无论如何对于 UTF-8 来说都是多余的,它用于文本编辑器提示 Unicode 编码。
  • @KorayKüpe CP1255 不受支持:php.net/manual/en/mbstring.supported-encodings.php
  • @Code4R7 然后试试 iconv("utf-8", "cp1255", $value);
  • @Koray Küpe,您的意思是 Alex Blex ;) 因为 ICU 是 Unicode 联盟的事实标准,所以我会跳过所有其他转码功能。虽然iconv 确实可以用于音译。

标签: php encoding utf-8 asp-classic hebrew


【解决方案1】:

您有一个 CP1255 编码字符串,但使用 CP1252(Latin1)解码,因此您可以通过作弊取回您的希伯来语文本。

# mis-decoded string
$str = "éçìéó àú ùîåàì æåñîï äòåáã á÷áåöä îòì 50 ùðä";

# convert to CP1252 from UTF-8
$str = iconv("UTF-8", "CP1252", $str);

# convert to UTF-8 by claiming $str is encoded with CP1255
$str = iconv("CP1255", "UTF-8", $str);

echo $str;

这是我在网上做的测试:https://3v4l.org/7taaN

我想分享一个使用mb_* 函数而不是iconv 但不支持CP1255 的示例代码。将字符集 ISO-8859-8mb_* 一起使用是一种选择,但由于它是 CP1255 的子集,因此可能会丢失数据。

【讨论】:

  • 不错的收获!你是怎么发现它是cp1252解码的?我也很好奇你为什么更喜欢 mb_* / iconv_* 函数?
  • @Code4R7 实际上来自经验。这是 ASP 中的常见错误。当您不指定 CodePage 时,默认情况下它通常是 CP1252,但 &lt;meta charset.. 标记会掩盖客户端的事实并发生奇迹:一切正常,但存储错误。我不是 PHP 开发人员,但我更喜欢 mb_*,因为 this
  • 感谢您的分享,我现在明白为什么您更喜欢mb_* 函数而不是iconv。就我个人而言,我更喜欢Intl,这样您就不必在使用前配置/覆盖输入/内部/输出编码。毕竟,当使用 Unicode 时,应用程序/站点很可能像网络的其余部分一样是国际化的,而 Intl 提供了各种额外的东西,比如IntlCalendar
  • @Code4R7 很有前途,但缺乏好的文档。我会记住的,谢谢。
  • 大部分文档位于 userguide.icu-project.org 。缺乏好的文档确实是一个问题,当真正有趣的 PHP 开始时,它总是会发生。当事情变得艰难时,艰难的开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2014-05-03
  • 2014-07-02
  • 2012-06-30
  • 2013-09-10
  • 2013-04-19
相关资源
最近更新 更多