utf-8 - 找出 straèe 的字符编码

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

我正在努力处理外部接口(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)根据链接站点,存在于字节 0xC30x9F 的 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/

相关文章:

php - 为什么 PHP DOMDocument loadHTML 对波斯字符不起作用?

c - 在 C 中使用带有 unicode 字符串的正则表达式

php - 将 MySQL 从 latin1 编码更改为 UTF-8

c++ - LPCTSTR 的非常奇怪的行为

logging - TYPO3:如何正确配置 $GLOBALS ['TYPO3_CONF_VARS' ] ['LOG' ]

backend - 如何使替代站点语言成为默认站点语言?

mysql - 将 MySQL 表从 Latin1 转换为 UTF8 时如何防止/检查数据丢失

Python:UnicodeDecodeError: 'ascii' 编解码器无法解码位置 0 中的字节 0xef:序号不在范围内(128)

menu - 通过 Typoscript 基于文本的语言菜单

android - Android 设备上短信的默认字符集/编码是什么?