VC(뿐만이 아니라 다른 곳에서도)에서 문자열 앞에 L을 붙이면 Unicode가 되는데... 문제가 좀 있다. 무슨 문제인고 하니..
wprintf(L"%s", L"하하");
이게 안된다는 것이다. 왜 그럴까? 그렇다면 이건?
// #1
wchar_t a[10];

mbstowcs(a, "하하", 5);

wprintf(L"%s", a);
첫번째 것과 비슷하지만.. 요걸 보자.
// #2
wchar_t *p;

p = L"하하";

wprintf(L"%s", p);
a와 p를 디버그 모드에서 보면 알겠지만.. 값이 "다르다". 그렇다면 #1과 #2의 다른점은? 특별히 달라 보이지 않는데.. 왜 출력이 안되는지... mbstowcs.c 파일을 뒤져보면.. mbstowcs()에서
// mbstowcs.c
if (pwcs)
{
...
#ifdef _MT
            if (ptloci->lc_handle[LC_CTYPE] == _CLOCALEHANDLE)
#else  /* _MT */
            if (__lc_handle[LC_CTYPE] == _CLOCALEHANDLE)
#endif  /* _MT */
            {
                /* C locale: easy and fast */
                while (count < n)
                {
                    *pwcs = (wchar_t) ((unsigned char)s[count]);
                    if (!s[count])
                        return count;
                    count++;
                    pwcs++;
                }
                return count;
			}
...
}
와 같은 부분이 있다. 바로 현재 locale의 상태가 c locale라는 것. 문제를 알았다면 답은 바로 나온다. locale.h에 선언되어 있는 setlocale() 라는 함수가 있는데 이것을 호출하면 locale를 변경할 수 있다. 그렇다면 일반적으로 사용되는 ansi로 바꾸어보자.
// #3
wchar_t a[10];
wchar_t *p;

setlocale(LC_ALL, ".ACP");

mbstowcs(a, "하하", 5);
p = L"하하";

wprintf(L"%s %s", a, p);
둘다 잘 된다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2008/04/26 14:22 2008/04/26 14:22
,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/168


블로그 이미지

빗소리를 먹는 사람.

- 장현준

Notices

Archives

Authors

  1. 장현준

Recent Trackbacks

  1. 듀얼클러치의 생각 rsvin28's me2DAY 2009

Calendar

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

Site Stats

Total hits:
158012
Today:
82
Yesterday:
228