【问题标题】:Array of bytes to UTF-8 string in PHP? [closed]PHP中UTF-8字符串的字节数组? [关闭]
【发布时间】:2012-09-03 03:21:34
【问题描述】:

如何将字节数组转换为 UTF-8 字符串?我需要这个,因为我是从二进制格式中提取的。

【问题讨论】:

  • 已经尝试过 utf8_decode(pack("C*", array_slice($data, $i, $j))),但这让我无处可去;) 我在这个 php 上有点新手。
  • 不重复。 utf-8 与 ascii 完全不同。我也假设解码方法。
  • 是的,它可能不同。但是您需要展示一个实际示例,说明编码是如何通过简单的 byte-as-char 序列化来混淆的。如果您有 UTF-8BE(实际上并不合法,但没有来自您的更好描述),那么它需要一个非常麻烦的解决方法。 (别问了,太宽泛了,因为很少有人回答像你这样肤浅的单行问题。)

标签: php utf-8


【解决方案1】:

字符串只不过是一个字节数组。所以一个 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://stackoverflow.com/a/5473057/530502 的更多示例。)

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

【讨论】:

    猜你喜欢
    • 2020-09-15
    • 2012-01-20
    • 1970-01-01
    • 2011-01-23
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2013-05-11
    相关资源
    最近更新 更多