我的代理对形式中有一些UTF-16编码字符。我想在屏幕上输出这些代理对作为字符。
有谁知道这是怎么回事?
答案 0 :(得分:3)
iconv('UTF-16', 'UTF-8', yourString)
答案 1 :(得分:1)
你的问题有点不清楚。
如果您的ASCII文本包含嵌入的UTF-16转义序列,则可以通过以下方式将所有内容转换为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给出字符(因为它在BMP之外需要4个字节)。
如果你的所有文字都是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");