PHP中将字节数组转换为UTF-8字符串?

7
我该如何将字节数组转换为UTF-8字符串?我需要这样做是因为我正在从二进制格式中提取数据。

可能是重复的问题:如何在PHP中将字节数组转换为字符串? - mario
尝试使用utf8_decode(pack("C*", array_slice($data, $i, $j))),但是没有任何进展;) 我在PHP方面有点新手。 - HelloWorld
5
不要重复。UTF-8与ASCII有很大的区别。我假设解码方法也是不同的。 - HelloWorld
是的,它可能会有所不同。但是你需要展示一个实际的例子,说明编码是如何通过简单的字节序列化混淆的。如果你使用UTF-8BE(实际上不合法,但在缺乏更好描述的情况下由你提供),那么它将需要一个相当繁琐的解决方法。(别问了,这个问题太广泛了,SO上很少有人回答像你这样的浅显问题。) - mario
1个回答

8
一个字符串就是一组字节。因此,UTF-8字符串与字节数组完全相同,只不过除此之外,您还知道字节数组代表什么。
因此,您的输入字节数组还需要一个附加信息:字符集(字符编码)。如果您知道输入字符集,可以将字节数组转换为另一个表示UTF-8字符串的字节数组。
PHP中执行此操作的方法称为mb_convert_encoding()
PHP本身并不知道字符集(字符编码)。因此,字符串实际上只是一组字节。应用程序必须知道如何处理它。
因此,如果您有一个字节数组,并想将其转换为PHP字符串以便使用mb_convert_encoding()转换字符集,请尝试以下操作:
$input = array(0x53, 0x68, 0x69);
$output = '';
for ($i = 0, $j = count($input); $i < $j; ++$i) {
    $output .= chr($input[$i]);
}
$output_utf8 = mb_convert_encoding($output, 'utf-8', 'enter input encoding here');

(不要只看上面的单个示例,可以在https://dev59.com/gG035IYBdhLWcg3wW-pa#5473057查看更多示例。)

$output_utf8 然后将是一个将输入字节数组转换为UTF-8的PHP字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接