我有这个:
\u00c3\u0083\u00c2\u00b6
代表德语ö
字符(html中为ö
)。
我的问题是我不知道它是什么编码,我尝试了几种解码方法(包括json_decode和mb_convert_encode('\u00c3\u0083\u00c2\u00b6','HTML-ENTITIES','UTF-8');
)来获取ö
字符,但没有一个工作。
由于这是源于源代码不可用的数据库转储,所以我无法查找首先编码的方式。
此问题不是的重复 How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?
由于charmap似乎不是任何有效的UTF-8或UTF-16,因此无法使用链接问题中的任何方法进行解码。
答案 0 :(得分:1)
因此,作为参考,您的源数据是 UTF8,然后有人运行了相当于Logout
的东西[将ISO8859-1转换为UTF8,而不考虑输入实际是什么]在它上面两次。
var data = []
data.push(data1,data2)
输出:
utf8_encode()
其中function unescape_unicode($input) {
return preg_replace_callback(
'/\\\\u([0-9a-fA-F]{4})/',
function ($match) {
return mb_convert_encoding(
pack('H*', $match[1]),
'UTF-8',
'UTF-16BE'
);
},
$input
);
}
$input = "\u00c3\u0083\u00c2\u00b6";
var_dump(
bin2hex(
utf8_decode( // un-mojibake #1
utf8_decode( // un-mojibake #2
unescape_unicode($input)
)
)
)
);
是string(4) "c3b6"
的UTF8表示。
NOT 将此代码投入生产。您应该只使用它来解除无法从底层存储中正确正确恢复或检索的数据。上述代码的主要目的是说明它是如何被破坏的。
这是你的新圣经:UTF-8 all the way through