2

我有一些 UTF-16 编码字符的代理对形式。我想将这些代理对输出为屏幕上的字符。

有谁知道这怎么可能?

4

2 回答 2

3

iconv('UTF-16', 'UTF-8', yourString)

于 2010-08-17T21:39:23.487 回答
1

你的问题有点不清楚。

如果您有嵌入 UTF-16 转义序列的 ASCII 文本,您可以通过以下方式将所有内容转换为 UTF-8:

function unescape_utf16($string) {
    /* go for possible surrogate pairs first */
    $string = preg_replace_callback(
        '/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i',
        function ($matches) {
            $d = pack("H*", $matches[1].$matches[2]);
            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
        }, $string);
    /* now the rest */
    $string = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
        function ($matches) {
            $d = pack("H*", $matches[1]);
            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
        }, $string);
    return $string;
}

$string = '\uD869\uDED6';
echo unescape_utf16($string);

它给出了 UTF-8 中的字符(需要 4 个字节,因为它在 BMP 之外)。

如果您的所有文本都是 UTF-16(包括 HTML 标签等),您可以简单地告诉浏览器输出是 UTF-16:

header("Content-type: text/html; charset=UTF-16");

这是非常罕见的,因为 PHP 脚本不能用 UTF-16 编写(除非 PHP 编译时支持多字节),这会使打印文字字符串变得很尴尬。

因此,您可能只有一段 UTF-16 文本,您想将其转换为您的网页使用的任何编码。您可以使用以下方法进行此转换:

//replace UTF-8 with your actual page encoding
mb_convert_encoding($string, "UTF-8", "UTF-16");
于 2010-08-18T00:31:14.693 回答