U+xxxxx 인코딩으로 지정된 표현식을 utf-8로 변환하는 방법은 무엇입니까?

U+xxxxx 인코딩으로 지정된 표현식을 utf-8로 변환하는 방법은 무엇입니까?

이모티콘은 U+xxxxx 형식을 사용하여 지정되는 것으로 보입니다.
여기서 각 x는 16진수입니다.

예를 들어,U+1F615~이다공식 유니코드 컨소시엄 코드"당황하는 얼굴"에 대해

답변1

UTF-8가변 길이입니다코딩유니코드. 이는 ASCII의 상위 집합으로 설계되었습니다. 바라보다위키피디아인코딩에 대한 세부정보입니다. 또는 인코딩 \x00 \x01 \xF6 \x15됩니다 .UCS-4BEUTF-32BE

유니코드 코드 포인트에서 UTF-8 인코딩을 얻으려면 로케일의 문자 맵이 UTF-8이라고 가정하고(의 출력 참조 locale charmap) 다음을 수행하십시오.

$ printf '\U1F615\n'

답변2

UTF-32(빅 엔디안)에서 UTF-8로 변환하는 방법은 다음과 같습니다.

$ confused=$(echo -ne "\x0\x01\xF6\x15" | iconv -f UTF-32BE -t UTF-8)     
$ echo $confused 

답변3

머리 속으로나 종이로 할 수 있는 좋은 방법:

  1. 얼마나 많은 바이트가 있는지 계산합니다. U+0080 아래의 값은 1바이트, U+0800 아래의 값은 2바이트, U+10000 아래의 값은 3바이트, 그렇지 않으면 4바이트입니다. 귀하의 예에서는 4바이트입니다.

  2. 16진수를 8진수로 변환: 0373025.

  3. 끝에서부터 시작하여 한 번에 2개의 8진수를 제거하면 일련의 8진수 값이 생성됩니다 037 030 025.

  4. 8진수 값이 예상 바이트 수보다 작으면 시작 부분에 추가로 0을 추가합니다 000 037 030 025.

  5. 첫 번째를 제외한 모든 항목에 대해 0200get: 을 추가합니다 000 0237 0230 0225.

  6. 첫 번째 항목에 0300예상 길이가 2인 경우, 03403인 경우, 03604인 경우 추가하여 다음을 얻습니다 360 0237 0230 0225.

이제 8진수 이스케이프 문자열로 작성되었습니다: \360\237\230\225. 원하는 경우 다시 16진수로 변환할 수 있는 옵션이 있습니다.

관련 정보