ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 전각문자(double byte)와 반각문자(single byte)
    공부 2016. 10. 10. 11:48

    전각문자와 반각문자

    전각문자는 특수문자 기호로 생각하면됩니다. 여기서 말하는 특수문자 기호는 !@#와 같이 shift+숫자가 아닌 123abc?!과 같은 형태로 윈도우 같은 경우 자음+한자로 생성되는 문자입니다. (맥에서 특수문자를 쓰기가 어려워서..)

    반각문자는 흔히 우리가 쓰는 기호입니다.


    유니코드가 등장하기 전의 멀티바이트 문자 인코딩에서는 일반적으로 반각 문자는 1바이트, 전각 문자는 2바이트로 처리되었으나, 유니코드가 등장한 현재는 반드시 그렇다고는 할 수 없습니다. 일례로 유니코드 인코딩 중 하나인 UTF-8에서는 반각 1은 1바이트로 처리되나 전각 1은 2바이트가 아니라 3바이트로 처리되며, UTF-16에서는 반각 1과 전각 1 모두 2바이트로 처리됩니다.
    아스키 코드에 속하는 문자는 반각 형태와 전각 형태를 모두 가지고 있습니다.

    • 반각: 123abc?! / 전각: 123abc?!

    다만 반각 숫자(123)는 숫자로 인식되나, 전각 숫자(123)는 숫자가 아니라 일반 문자로 인식되는 경우가 많습니다. 따라서 수를 입력하고자 할 때는 반드시 반각으로 입력해야 합니다. 

    그리고 문자 인코딩에 따라 같은 문자라도 전각/반각 여부가 달라지기도 합니다. 확장 로마자(Æ, ø 등)나 그리스 문자, 키릴 문자의 경우 동아시아권 문자 인코딩에서는 2바이트 영역에 속해 전각으로 표시되나, 서양권 문자 인코딩에서는 반각으로 표시됩니다. 실제로 확장 로마자, 그리스 문자, 키릴 문자의 경우 반각으로 표현하는 것이 가독성을 높여 주며, 전각으로 표현하면 글자 간격이 너무 벌어져서 가독성이 상당히 떨어진다는 문제가 있습니다.

    전각문자 반각문자로 변환

    특수문자 기호(전각문자)와 일반 문자(반각문자)는 아스키코드로 120차이가 나고 16진수론 80차이가 납니다. 따라서 0xfee0 이상의 문자는 전각문자이므로 0xfee0를 빼서 일반 문자로 변환하면 반각문자가 나옵니다. 특수문자 공백(white space)은 0x3000이여서 해당없으므로 별개로 하드코딩하여 일반 공백(0x20)으로 변경해야 합니다.

    (왜 0xfee0 차이가 나는지는..)

    c#에서는 이를 처리해주는 함수가 존재합니다.

    더 자세한 내용은 전각과 반각 에서 확인할 수 있습니다.

    댓글