数据库是 iso-8859-1,使用 utf8_encode 字符转换错误
DB is iso-8859-1, using utf8_encode characters get converted wrong
我的数据库使用 ISO-8859-1,我通过 sqlsrv_query
获取数据。有一些像 “
这样的字符,在获取数据后我使用 utf8_encode()
函数。
然后我使用此设置回显将数据发送回 Ajax 请求:
header('Content-Type: application/json');
echo json_encode($Data);
我通过 responseJSON 捕获数据,一切正常,但这里有一个错误编码的例子:
{"Products":{"1":{"ProductID":"1","Name":"Testproduct\u0084Foobar\u0093"}}}
\u0093
应该是 “
但它不是,它的 Unicode 错误应该是 \u201C
或者甚至没有被拆分成 Unicode。
我是不是做错了什么?
ISO 8859-1 不包括弯引号字符,例如 “
;可以是 seen on Wikipedia,字符 0x93
未定义,保留用作控制字符。
然而,当人们指定 ISO 8859-1 时,他们实际上通常指的是 Windows codepage 1252,它用其他字符(包括弯引号)替换了这个保留块。 0x93
在 Windows-1252 中确实是 “
,因此可以合理地假设这是您的数据库实际配置的内容。
由于utf8_encode
仅处理 ISO 8859-1,因此您需要使用不同的函数来转换为 Unicode 编码。有两个这样的函数与标准 PHP 发行版捆绑在一起,来自不同的扩展:
iconv
- 类似于 $utf8_string = iconv('Windows-1252', 'UTF-8', $db_string);
mb_convert_encoding
- 类似于 $utf8_string = mb_convert_encoding($db_string, 'UTF-8', 'Windows-1252');
我的数据库使用 ISO-8859-1,我通过 sqlsrv_query
获取数据。有一些像 “
这样的字符,在获取数据后我使用 utf8_encode()
函数。
然后我使用此设置回显将数据发送回 Ajax 请求:
header('Content-Type: application/json');
echo json_encode($Data);
我通过 responseJSON 捕获数据,一切正常,但这里有一个错误编码的例子:
{"Products":{"1":{"ProductID":"1","Name":"Testproduct\u0084Foobar\u0093"}}}
\u0093
应该是 “
但它不是,它的 Unicode 错误应该是 \u201C
或者甚至没有被拆分成 Unicode。
我是不是做错了什么?
ISO 8859-1 不包括弯引号字符,例如 “
;可以是 seen on Wikipedia,字符 0x93
未定义,保留用作控制字符。
然而,当人们指定 ISO 8859-1 时,他们实际上通常指的是 Windows codepage 1252,它用其他字符(包括弯引号)替换了这个保留块。 0x93
在 Windows-1252 中确实是 “
,因此可以合理地假设这是您的数据库实际配置的内容。
由于utf8_encode
仅处理 ISO 8859-1,因此您需要使用不同的函数来转换为 Unicode 编码。有两个这样的函数与标准 PHP 发行版捆绑在一起,来自不同的扩展:
iconv
- 类似于$utf8_string = iconv('Windows-1252', 'UTF-8', $db_string);
mb_convert_encoding
- 类似于$utf8_string = mb_convert_encoding($db_string, 'UTF-8', 'Windows-1252');