2010-08-17 2 views
2

대리 용 페어 형태로 UTF-16 인코딩 된 문자가 있습니다. 나는 그 대리모 쌍을 화면상의 문자로 출력하고 싶다.출력 UTF-16? 조금 붙어서

누구나 가능하다는 것을 알고 있습니까?

+1

http://stackoverflow.com/questions/3506120/unicode-surrogate-pairs-question dup처럼 보입니다. –

답변

3

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

1

귀하의 질문에 약간의 불확실성이 있습니다. 당신이 포함 된 UTF-16 이스케이프 시퀀스 ASCII 문자가있는 경우

,이 방법으로 UTF-8로 모두 변환 할 수 있습니다 : 그것은 이후

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); 

(4 바이트가 필요합니다 BMP 외부).

모든 텍스트 인 경우 UTF-16 (등 HTML 태그를 포함하여)는, 당신은 단순히 출력이 UTF-16에있는 브라우저를 말할 수 :

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

이것은 매우 드문, PHP 스크립트 때문에 (PHP가 멀티 바이트 지원으로 컴파일되지 않는 한) UTF-16으로 작성할 수 없으므로 리터럴 문자열을 어색하게 인쇄 할 수 있습니다.

그래서 UTF-16 형식의 텍스트 만 웹 페이지가 사용하는 인코딩으로 변환하려고합니다. 다음과 같이이 변환을 수행 할 수 있습니다.

//replace UTF-8 with your actual page encoding 
mb_convert_encoding($string, "UTF-8", "UTF-16"); 
관련 문제