ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴퓨터과학] 텍스트 인코딩 알아보기
    컴퓨터과학 2024. 7. 26. 17:29
    반응형

    텍스트 인코딩 알아보기


    컴퓨터는 모든 자료를 이진법으로 표시합니다. 그런데, 우리가 흔히 사용하는 텍스트 정보는 이진법으로 표시할 수 없지요. 그래서, 컴퓨터가 이해할 수 있는 언어와 사람이 이해할 수 있는 언어 사이의 관계를 정의하는 방법으로 텍스트 데이터를 표현할 수 있습니다. 이것이 바로 텍스트 인코딩(Text Encoding)이지요. 텍스트 인코딩을 위한 규격은 다양하게 마련되어 있는데, 우리나라에서 자주 볼 수 있는 규격은 UTF-8(Universal Coded Character Set + Transformation Format - 8-bit)과 EUC-KR(Extended Unix Code-Korea), CP949(Code Page 949)가 있습니다. 여기서, 한국어 문서는 주로 EUC-KR 또는 CP949 규격을 이용하는 편입니다. 이 두 규격은 약간의 차이가 있지만, 거의 동일한 규격이기 때문에 대부분의 경우에는 별도 구분하지 않고 이용합니다.

     

     

    만약 CP949 규격으로 인코딩된 텍스트 데이터를 UTF-8로, 또는 그 반대로 읽게 된다면 텍스트가 이상하게 읽어지거나 에러가 발생하게 되는데, 이 상황을 인코딩 오류라고 합니다. 이런 상황이 왜 발생하는지, 아래 코드를 참고해서 살펴보도록 하겠습니다. 한국어 '안녕' 과 영어 'hello' 단어를 각각 UTF-8과 CP949 규격으로 인코딩하면 다음과 같습니다.

     

     

    def print_bytearray(x):
        print(f'\'{x}\'이(가) UTF-8 인코딩된 데이터')
        print(bytearray(x, 'utf8'))
        print('-'*50)
        print(f'\'{x}\'이(가) CP949 인코딩된 데이터')
        print(bytearray(x, 'cp949'))
        print('-'*50)
    
    test_kr = '안녕'
    test_en = 'hello'
    
    print_bytearray(test_kr)
    print_bytearray(test_en)
    '안녕'이(가) UTF-8 인코딩된 데이터
    bytearray(b'\xec\x95\x88\xeb\x85\x95')
    --------------------------------------------------
    '안녕'이(가) CP949 인코딩된 데이터
    bytearray(b'\xbe\xc8\xb3\xe7')
    --------------------------------------------------
    'hello'이(가) UTF-8 인코딩된 데이터
    bytearray(b'hello')
    --------------------------------------------------
    'hello'이(가) CP949 인코딩된 데이터
    bytearray(b'hello')
    --------------------------------------------------

     

     

    영어의 경우, 인코딩 규격에 관계 없이 똑같은 데이터가 출력되지만, 한국어는 서로 다른 값이 나옵니다. 인코딩 오류가 발생하는 경우는 이런 문제가 원인이 되지요. 다행히도 한국어 문서는 아주 오래 전의 파일을 제외한다면 대부분 CP949 규격으로 읽어들이면 특별한 문제 없이 읽을 수 있습니다. 편의상 CP949 규격으로 읽어들이고, 에러가 발생하면 UTF-8로 읽어들여라고 이해를 해도 무방합니다.

    반응형

    '컴퓨터과학' 카테고리의 다른 글

    [컴퓨터과학] 논리 회로(Logic Gate) 알아보기  (0) 2024.07.15

    댓글

문의: jwkang3929@naver.com