티스토리 뷰


아.. 노가다해서 한글쓰는걸 만들어 놧더니 다 만들고 나니까 엄청나게 쉬운 방법을 찾아냇습니다.
이전에 만든 함수로는 한글 영어 특문 + 숫자 만 적을 수 있지만 이번 방법으로는 세계 모든언어를 표현할 수 있고 이것들 타이핑 하는 함수의 소스코드는 20줄밖에 안됩니다..

방법은 [Alt + 숫자패드]를 누르는 방법입니다. Alt버튼을 누른상태에서 오른쪽 키패드로 유니코드의 10진코드값을 적으면 그대로 적힙니다..

예를 들어 '가'의 16진코드값은 0xAC00 인데, 이것을 10진코드로 바꾸면 44,032이 나옵니다.
Alt를 누른상태에서 키패트 44032를 치고 알트를 때면 '가'가 입력이 됩니다..


아.. 다 하고 나니까 발견하네.. 이 방법이 백배 좋은거 같습니다...




// 2011-08-21 7:50 추가.
문제가 발생했습니다.. 유니코드 코드값으로 썻는데 특정페이지에서만 작동하고 대부분의 페이지에서는 찾을수 없다는 '?' 라는 문자가 출력되더군요..
알아보니 유니코드 코드값과 멀티바이트 코드 값이 다른데, 멀티바이트 코드값으로 하니 대부분 잘 출력이 되더군요..

근데 문제가 발생한게 한글을 표현하려면 한글자에 2바이트의 공간이 필요합니다. 하지만 유니코드 자료형이 아닌 단순 char형으로 선언을 하면 한글자에 2개의 공간이 필요하게 되죠.
멀티바이트 '가'의 코드값은 0xB0A1인데, 저 코드값이 char형 변수에 어떻게 저장되는지 알아보니 다음과 같이 저장이 되더군요.

Arr[0] = 0xffffffB0
Arr[1] = 0xffffffA1

따라서 이 코드를 0xB0A1로 변환할 필요가 있었습니다.
다음과 같은 방법으로 결과를 얻어 냇습니다.
(((~Arr[0])^0xff)<<8)+((~Arr[1])^0xff)

이것을 이용한 소스코드.


코드보면 2바이트짜리 문자에대한 처리만 있는데 1바이트짜리 문자 처리도 넣어야 정상작동한다!
댓글
  • 프로필사진 이름 오!! 감사합니다. 잘만드셨네요.
    제가 딱 찾던거네요.
    2012.03.06 15:09
  • 프로필사진 Rogue 정말 감사합니다. 좋은 참고가 되었습니다. 그런데 질문드리고싶은게 있는데요, '한'을 예로 들자면 유니코드의 10진수는 54620이고 멀티바이트는 51153이더군요. 그런데 이걸 실제로 Alt를 눌러서 칠 때 유니코드와 멀티바이트를 완전히 같은 방식으로 치는 코드처럼 보이는데, (Alt + numpad 51153 치면 쟑 나옵니다 ㅠㅜ) 실제로 코드를 돌려보면 그렇지 않고 '한'이 제대로 나오네요. 위와 아래간에 어떤 차이가 있는지 알 수 있을까요? 2012.09.17 04:15
  • 프로필사진 Favicon of https://boongubbang.tistory.com BlogIcon akon47 안녕하세요. 지금 코드를 보니까 문제가 많네요.. 일단 위코드와 아래코드의 차이는 유니코드/멀티바이트 차이입니다. 두 코드다 "유니코드"컴파일을 가정하고서 만든 코드입니다. (이럴거면 TCHAR등을 사용하면 안됫는데.. 제 실수 입니다..) 위에 있는 코드는 유니코드의 코드값을 입력하는 코드이고, 아래코드는 유니코드 코드값을 멀티바이트로 변환한후에 멀티바이트 코드값을 입력하는 코드 입니다.

    한마디로 위에있는코드는 "한"을 입력할때 Alt+54620 을 입력하는 코드이구, 아래코드는 Alt+51153을 입력하는 코드입니다.
    2012.09.17 10:01 신고
  • 프로필사진 Favicon of https://swprogrammer.tistory.com BlogIcon CodeHolic11 본 글에 보면 아래 코드에 2바이트짜리 처리 코드만 넣으셨다고 되어 있는데,
    1바이트짜리 문자는 처리를 어떻게 하나요?
    찾아보다가 영 안 풀려서 질문드립니다...
    2017.12.17 10:44 신고
댓글쓰기 폼