【问题标题】:Find out character encoding of straße找出 straße 的字符编码
【发布时间】:2013-03-25 17:17:32
【问题描述】:

我在为外部接口的内容编码而苦苦挣扎。在 MySQL 数据库中,排序规则是 latin1_swedish_ci。也是字段istlatin1_swedish_ci的排序规则。 php 脚本以 UTF-8 编码,浏览器中的输出为我提供 UTF-8。除此数据库的内容外,一切正常。数据库连接应该是UTF-8(Typo3 4.7),内容是

街道

但应该是straße

mb_detect_encoding($data['street'],'UTF-8') 说它是UTF-8。如果我使用utf8_decode() 我会得到

直线

如果我使用utf8_encode() 我会得到

街道

我的假设是 UTF-8 编码的数据存储在 ISO-8859-1 中,但如果是这种情况,这里就不应该出现这样的问题。如何找出真正的编码是什么?

PS:我无法更改源的编码!

我最初的问题的解决方案:

我必须使用这行代码将数据库连接从 UTF-8 设置为 ISO-8859-1

$res = $GLOBALS['TYPO3_DB']->sql_query("SET NAMES latin1");

【问题讨论】:

    标签: utf-8 character-encoding typo3 iso-8859-1 latin1


    【解决方案1】:

    字符 ß 'LATIN SMALL LETTER SHARP S' (U+00DF) 存在于字节 0xC30x9F 的 UTF-8 中,根据链接站点:

    UTF-8(十六进制)0xC3 0x9F (c39f)

    如果我们查看 ISO-8859-1 codepage layout,那么这些字节代表字符 à 和 ISO-8859-1 代码页布局中未定义的字符。因此不是这样。另一种与 ISO-8859-1 有一些重叠的常见字符编码是 Windows CP1252(也称为 ANSI,在记事本中保存文本文件时默认使用 - 可以通过使用 Save As 替代) .如果我们查看CP1252 codepage layout,那么这些字节代表字符ß,这证实了您最初检索的内容。

    所以,它很可能是 CP1252 编码的。

    【讨论】:

      【解决方案2】:

      您看到的“ß”实际上是 windows-1252(也称为 CP1252)对构成“ß”的 UTF-8 编码的两个字节 0xC3 和 0x9F 的解释。但这似乎意味着数据实际上是 UTF-8 编码的,只是被误解为 windows-1252 编码。所以我认为它应该被简单地处理为UTF-8,并采取适当的预防措施。

      【讨论】:

        【解决方案3】:

        我建议您继续验证您的 sql 连接正在使用什么字符集。它不一定与您为数据库定义的字符集相同。

        来自 PHP

        // Opens a connection to a MySQL server
        $connection = mysql_connect ($server, $username, $password);
        $charset = mysql_client_encoding($connection);
        $flagChange = mysql_set_charset('utf8', $connection);
        echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";
        

        PHPMYADMIN 内部

        1. 打开数据库information_schema
        2. 打开表schemata
        3. 查看您的 mysql 默认排序规则

        您可能会也可能无法更改这些参数,具体取决于用户权限。

        如上所示,我通过将以下行附加到我的connection.php 文件(我在每个使用 db 访问的页面的开头调用)解决了我在 mysql 中的冲突字符集问题:

        $flagChange = mysql_set_charset('utf8', $connection);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多