시스템 locale을 따라서 하고싶다면 setlocale()로 locale설정한후에 mbstowcs()나 mbsrtowcs()같은걸로 변환복사하는게 가장 기본적인 방법일 것이고 , locale상관없이 특정인코딩을 사용하고 싶다면 iconv_open(),iconv(),iconv_close()사용하면 될듯 싶어요. win32환경이면 이외에도 _wmain을 사용해도 되고, MultiByteToWideChar()같은 API를 활용해도 됩니다.
제가 하고 싶던일은 궁극적으론 qse같은 라이브러리로 유닉스 툴 프로그램들로 한글 처리를 할수 있게 하는 것이었습니다. bacon님의 abiyo.net 사이트에 있는 qse 라이브러리가 한글도 처리가 되는지요? 그리고 regex나 awk같은 걸 구현하려면 어떤 자료들을 읽어보면 많은 도움이 됩니까?
윈도우(비주얼스튜디오?)환경이라면 유니코드로
윈도우(비주얼스튜디오?)환경이라면 유니코드로 설정해서
_wmain 을 사용하시면 간단할 것 같다는 생각이 듭니다만...
그냥 인자를 한개씩 wchar_t 배열로 저장하되
유니코드로 인코딩하는 방법을 써야 할것 같네요...
그런데 그냥 char배열에 한글이 들어가긴 하지만
이걸 wchar_t배열에 넣고싶은 이유는 뭔가요?
인코딩 문제때문에 그러시는것 맞나요?
wchar_t에 넣는다면 쓸모는 많지요...
wchar_t으로 한글을 코맨드 아규먼트를 넣을수 있으면
switch (wargv[1])
case L'한':
같은 것도 할수 있고
grep이나 tr같은 곳에 한글을 한자리 단위씩 넣을 수 있지요.
예
tr ㄱ-힣 한
tr a-zA-Z a 이나 tr 0-9 n 처럼 한글도 처리가 같은 식으로 될수 있지요
그리고 '한' 이라 문자 수만 세면 한글문자의 개수도 알수 있고..
시스템 locale을 따라서 하고싶다면
시스템 locale을 따라서 하고싶다면 setlocale()로 locale설정한후에 mbstowcs()나 mbsrtowcs()같은걸로 변환복사하는게 가장 기본적인 방법일 것이고 , locale상관없이 특정인코딩을 사용하고 싶다면 iconv_open(),iconv(),iconv_close()사용하면 될듯 싶어요. win32환경이면 이외에도 _wmain을 사용해도 되고, MultiByteToWideChar()같은 API를 활용해도 됩니다.
qse..
제가 하고 싶던일은 궁극적으론 qse같은 라이브러리로 유닉스 툴 프로그램들로 한글 처리를 할수 있게 하는 것이었습니다. bacon님의 abiyo.net 사이트에 있는 qse 라이브러리가 한글도 처리가 되는지요? 그리고 regex나 awk같은 걸 구현하려면 어떤 자료들을 읽어보면 많은 도움이 됩니까?
qse라이브러리는 wchar_t를 기본으로 사용할수
qse라이브러리는 wchar_t를 기본으로 사용할수 있기 때문에 지금 하려는 수준의 다국어 처리는 될겁니다. lib/cmn/main.c를 보면 argc, argv관련된것도 볼수 있어요. regex나 awk도 포함되어 있습니다.
어떻게 소스를 다운받을 수 있습니까?
tar ball이나 zip으로 압축되 있으면 좋겠는데...
http://code.google.com/p/qse/
http://code.google.com/p/qse/downloads/list 에 있어요.
감사
합니다
사실은...
이런 코드를 개인적으로 짜봤는데...
가능하더라고요. 그러나
이 부분을
처럼 바꾸고 싶은데 argvtowargv 안에서 wchar_t **wargv를 하고 return 이 가능한가요?
아니면 리턴하면 wargv가 쓸모없는 값을 갔나요?
그리고 이 위의 코드를 더 낳게 만들수 있는 방법이 있으면 부탁드립니다.
참고로 위의 코드가 필요하신분이 쓰신다면 전 상관 없습니다. 그냥이건 개량해선 이곤 쓰세요. ^.^
함수내에서 변수를 조작하고 그 결과값을 가져올려면,
함수내에서 변수를 조작하고 그 결과값을 가져올려면, 처음부터 변수에 대한 포인터를 넘겨주거나 함수안에서 동적할당하여 리턴하는 수밖에 없습니다.
함수안에서 동적할당하여란...
void *ptr = malloc(sizeof(wchar_t **));
return ptr;
란 것인가요? 예제를 올리면 고맙겠습니다.
배열이니까 배열길이만큼
배열이니까 배열길이만큼 곱해줘야죠.
wchar_t **wargv = (wchar_t**)malloc(sizeof(wchar_t*)*argc);
...
return wargv;
동적할당 구문 적으신걸 보니까 포인터에는 익숙치 않으신 듯한데, 입문서에서 포인터와 동적할당에 대한 내용을 읽어보시길 추천합니다.
감사합니다
^.^
댓글 달기