https://namu.wiki/w/UTF-8#toc

 

UTF-8

UTF-8은 가장 많이 사용되는 가변 길이 유니코드 인코딩이다. 켄 톰슨과 롭 파이크( Go 언어 를 만든 사람

namu.wiki

 

 

#include <stdio.h>

#define iconSZ sizeof "✅" // icon size == 5byte
// https://namu.wiki/w/UTF-8#toc
// https://www.compart.com/en/unicode/U+2705
// UTF-8 Encoding:	0xE2 0x9C 0x85

int main(void)
{
    char icon[iconSZ] = "✅";
    printf("icon %s size: %ld Byte\n", icon, sizeof icon);

    char *ptr = icon;
    char a[5] = "";
    a[0] = *(ptr+0);
    a[1] = *(ptr+1);
    a[2] = *(ptr+2);
    a[3] = *(ptr+3);

    printf("a %s, %ld\n", a, sizeof a);
    
    char t[10] = "✅";
    printf("a[0]의 16진수 %#x\n", icon[0]);
    printf("a[0]의 16진수 %x\n", a[0]);
    printf("t[0]의 16진수 %x\n", t[0]);

    char cpy[4] = "";
    cpy[0] = *(ptr + 0);
    cpy[1] = *(ptr + 1);
    cpy[2] = *(ptr + 2);
    cpy[3] = *(ptr + 3);
    
    printf("cpy %s, %ld\n", cpy, sizeof cpy);

    printf("cpy[0]의 16진수 %x\n", cpy[0]);
    printf("cpy[1]의 16진수 %x\n", cpy[1]);
    printf("cpy[2]의 16진수 %x\n", cpy[2]);
    printf("cpy[3]의 16진수 %x\n", cpy[3]);


    char cpy2[4] = "";
    cpy2[0] = 0xE2;
    cpy2[1] = 0x9C;
    cpy2[2] = 0x85;
    
    printf("cpy2 %s, %ld\n", cpy2, sizeof cpy2);


    // https://www.compart.com/en/unicode/block/U+AC00

    // 0xEA 0xB0 0x80
    char ch[4] = "";
    ch[0] = 0xEA;
    ch[1] = 0xB0;
    ch[2] = 0x80;
    // ch[3] = 0xAC;
    
    printf("ch %s, %ld\n", ch, sizeof ch);

    // 0x0000AC00

    // https://namu.wiki/w/UTF-8#toc
    char han[4] = "가";
    // 0xEA 0xB0 0x80
    char ch2[4] = "";
    ch2[0] = han[0];
    ch2[1] = han[1];
    ch2[2] = han[2];
    ch2[3] = han[3];
    printf("han[0]의 16진수 %x\n", han[0]);
    printf("han[1]의 16진수 %x\n", han[1]);
    printf("han[2]의 16진수 %x\n", han[2]);
    printf("han[3]의 16진수 %x\n", han[3]);
    printf("ch2 %s, %ld\n", ch2, sizeof ch2);
}