VB는 내부적으로 유니코드를 사용합니다. 유니코드 저장시에는 2바이트가 필요합니다.
VB에서 유니코드가 메모리에 저장될때는, 유니코드의 선두 바이트와 후위 바이트가 서로 역순으로 저장됩니다.

만약 이라는 글자가 있다고 할때 이에 해당하는 유니코드에 대한 문자코드와 ANSI코드에 대한 문자코드를 알아봅시다.
갂이라는 문자의 유니코드를 알아보는 코드는 AscW("갂") 입니다.(16진수로 표시하기 위해 Hex 함수를 사용합니다.)
코드는 hex(AscW("갂")) 이면 결과는 16진수 AC02 입니다. 갂이라는 문자의 유니코드는 16진수 AC02 입니다.

갂이라는 문자의 ANSI코드를 알아보는 코드는 Asc("갂") 입니다.(16진수로 표시하기 위해 Hex 함수를 사용합니다.)
코드는 hex(Asc("갂")) 이면 결과는 16진수 8141 입니다. 갂이라는 문자의 ANSI코드는 16진수 8141 입니다.

그러면 이번에는 갂이라는 문자의 유니코드 AC02가 메모리에 저장된 각 바이트 값을 읽어봅시다.
1. 바이트 동적배열을 사용해서 읽어올수 있읍다.
Dim Code() as Byte
Code=ChrW(AscW("갂"))
하면 Code(0)에 2 와 Code(1)에 AC가 저장된걸 확인할수 있으며, 유니코드 값이 역순으로 저장된 걸 확인할수 있읍니다.
2. AscB와 MidB를 사용해서 확인할수 있읍니다.
hex(AscB(Midb("갂",1,1)) 와 hex(AscB(Midb("갂",2,1)) 하면 역시 2와 AC가 표시됩니다. 역시 유니코드값이 역순으로 저장된걸 확인할 수 있읍니다.

다은 링크는 한글 코드 페이지(949)의 문자 코드표 입니다. http://msdn.microsoft.com/en-us/goglobal/cc305154

VB에서 기본 컨트롤들은 ANSI 문자 코드만 지원합니다. 유니코드 문자코드는 지원하지 않습니다.
무슨 말이냐면 기본 컨트롤들에 유니코드 문자열(VB 문자열)을 지정하면 ANSI 문자열로 변환한 후에 사용합니다. 만약 변환될수 없는 문자가 포함되어 있다면 그 문자는 ?로 표시됩니다. 그러나 Microsoft Forms 2.0 Object Library 컨트롤을 추가하면 여기에 포함된 컨트롤들은 유니코드를 지원합니다. 유니코드 문자열을 지정해주면 유니코드 문자코드에 맞는 문자를 표시합니다.
현재 시스템에서 사용하는 문자코드로 표시할수 없는 문자들이라면 위의 함수들을 사용해서 코드로 값을 넣어주시면 됩니다.
갂이라는 문자를 지정한다고 하면 갂에 해당하는 문자 코드 AC02를 ChrW(&hAC02) 처럼 사용해서 문자를 생성해 낼수 있읍니다.

추가로 한글과컴퓨터의 한글에서 특수문자를 입력하고 그에 대한 코드를 알아보기 위해서는 한글 문서를 워드로 저장하고,
워드에서 문서를 열고 특수문자를 선택하면 상단에 글꼴 종류를 알수 있으며, 워드 문서를 다시 웹문서로 저장한 다음,
웹문서를 택스트 파일로 열어보면  &#코드 형식으로 특수문자에 해당하는 유니코드를 알수 있읍니다.

다음 예제는 일반 텍스트 박스와 유니코드를 지원하는 텍스트 박스에서 하나의 유니코드 문자를 표시해본 예이다.
Option Explicit

Private Sub Form_Load()
    Dim Code As Long
   
    Code = &H21B3 ' 문자에 대한 유니코드
    Text1.Font.Name = "MS Mincho"
    TextBox1.Font.Name = "MS Mincho"
    Text1.Font.Size = 71
    TextBox1.Font.Size = 71
    Text1.Text = Chr(Asc(ChrW(Code))) ' Chr에 인수는 ANSI 문자 코드라고 간주한다. 따라서 유니코드를 ANSI코로 바꾸기 위해 ChrW와 Asc를 사용했다.
    TextBox1.Text = ChrW(Code)
End Sub
결과는 다음과 같다


왼쪽은 ANSI코드를 지원하는 일반 컨트롤이며, 오른쪽 유니코드를 지원하는 컨트롤이다.

+ Recent posts