UTF-16 인코딩으로 작성된 이진 모드의 파일을 읽고 UNICODE 코드 포인트로 변환해야합니다. U + 0000..U + FFFF 간격에서 코드 포인트를 성공적으로 매핑하는 데 아무런 문제가 없었습니다. 문제는 U + 10000에서 U + 10FFFF까지 UTF-16 인코딩은 두 조각을 사용하여 코드 포인트를 형성한다는 것입니다.C 코드를 사용하여 UTF-16 파일에서 유니 코드 코드 지점을 매핑하는 방법
예 :이 로켓은 유니 코드 코드 포인트 : U + 1F680을 형성하는 0xD83D 0xDE80으로 UTF-16으로 인코딩됩니다.
UTF-16 인코딩은 UIC 0000에서 U + FFFF까지의 UNICODE 코드 포인트와 정확히 같은 번호이므로 UTF-16을 UNICODE 코드 포인트로 간단히 변환하는 코드를 작성했습니다. 문제는 U + 10000 이후이고, 프로그램은 첫 번째 부분 (D83D)을 간격 U + 0000에서 U + FFFF까지 이해하기 때문에 앞으로 진행됩니다.
어떻게이 오류를 피할 수 있습니까? 유니 코드 Codepoint를 성공적으로 구성하려면 읽는 부분에 조각이 하나 더 있어야한다는 것을 알기 위해 코드를 작성하려면 어떻게해야합니까?
미리 감사드립니다.
이 거짓 "UTF-16 인코딩을 정확하게 간격에서 UNICODE 코드 포인트와 동일한 개수 U + 0000 U에 + FFFF ". UTF-16 0xD800 ~ 0xDFFF는 유니 코드 U + 10000을 나타내는 [surrogates] (https://en.wikipedia.org/wiki/UTF-16#U.2BD800_to_U.2BDFFF)입니다. –