我正在努力处理外部接口(interface)内容的编码。在 MySQL 数据库中,排序规则是 latin1_swedish_ci
。还有字段 ist latin1_swedish_ci
的排序规则。 php 脚本以 UTF-8 编码,浏览器中的输出为我提供了 UTF-8。除此数据库的内容外,一切正常。数据库连接应该是UTF-8(Typo3 4.7),内容是
straße
但它应该是 straße
。
mb_detect_encoding($data['street'],'UTF-8')
表示它是 UTF-8
。如果我使用 utf8_decode()
我会得到
stra�?e
如果我使用 utf8_encode()
我得到
straße
我的假设是 UTF-8 编码的数据存储在 ISO-8859-1
中,但如果是这种情况,就不应该在这里出现此类问题。我如何找出真正的编码是什么?
PS:我无法更改源的编码!
我对最初问题的解决方案:
我必须使用这行代码将数据库连接从 UTF-8 设置为 ISO-8859-1
$res = $GLOBALS['TYPO3_DB']->sql_query("SET NAMES latin1");
最佳答案
字符 ß
'LATIN SMALL LETTER SHARP S' (U+00DF)根据链接站点,存在于字节 0xC3
和 0x9F
的 UTF-8 中:
UTF-8 (hex) 0xC3 0x9F (c39f)
如果我们看一下 ISO-8859-1 codepage layout , 那么这些字节代表字符 Ã
和一个未在 ISO-8859-1 代码页布局中定义的字符。事实并非如此。另一种与 ISO-8859-1 有一些重叠的常见字符编码是 Windows CP1252(也称为 ANSI,在记事本中保存文本文件时默认使用——可以使用另存为代替) .如果我们看CP1252 codepage layout , 然后这些字节代表字符 Ã
和 Ÿ
确认你最初检索的内容。
所以,它很可能是 CP1252 编码的。
关于utf-8 - 找出 straèe 的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620888/