У меня есть кодированные символы UTF-16 в их форме суррогатной пары. Я хочу вывести эти суррогатные пары как символы на экране.Выход UTF-16? Немного застрял
Кто-нибудь знает, как это возможно?
У меня есть кодированные символы UTF-16 в их форме суррогатной пары. Я хочу вывести эти суррогатные пары как символы на экране.Выход UTF-16? Немного застрял
Кто-нибудь знает, как это возможно?
iconv('UTF-16', 'UTF-8', yourString)
Ваш вопрос немного неясно.
Если у вас есть 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 (требуется 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");
http://stackoverflow.com/questions/3506120/unicode-surrogate-pairs-question Похоже, DUP. –