우오오.. 너무 잘 뜨는데요?
원래는 프로젝트 자체만 그냥 WCHAR(Unicode)로 컨버팅 하려고 했는데, 파일명을 WCHAR로 바꾸니 인수도 WCHAR로 바꿔야 되고, 인수를 WCHAR 로 바꾸다 보니 각종 데이터를 저장하는 변수도 WCHAR로 바꾸고... 더 깊이 들어가서는 네이티브 함수에 가까운 memcpy/memcmp 루틴까지 건드리는 바람에.. 결국 id3 엔진까지 ASCII와 Unicode로 나뉘어져 버렸습니다 -_-;
참 좋은게, 못 읽는 파일이 없을 뿐더러 깨지는 문자가 하나도 없네요. 예전엔 몰랐는데, 이렇게 직접 만들어놓고 보니까 편리할 수가 없습니다 -_-;.. 실용적인 프로그래밍을 위해서는 결국 유니코드는 넘어야 할 산이었네요.
조금 짜증나는(?) 게, ASCII와 Unicode간의 변환은 아예 자체적으로 라이브러리화 시켜놓았으니 그렇다 치는데, 파일 입출력 함수부터 문자열 관련 함수까지 죄다 다 다릅니다. 다른 쓸만한 함수가 있는지는 모르겠는데... 일단 전 이렇게 쓰고 있지요.
strcpy, strcmp, strlen >> wcscpy, wcscmp, wcslen
fopen_s >> _wfopen_s
printf, scanf >> wprintf, wscanf
fopen_s >> _wfopen_s
printf, scanf >> wprintf, wscanf
CString 같은 경우는 굳이 CStringW로 따로 형변환을 해주지 않아도 #ifdef ~ 구문으로 처리를 했는지 알아서 유니코드로 처리하더군요. C#이나 VB에서는 어떤 식으로 돌아가는지는 모르겠습니다만은.. [그때는 유니코드다 ASCII다 뭐다 참 머리아파서 그냥 파일 입출력을 할 수 있다는 것만으로도 감격했던 시절(?)이었습니다]
추가 :: 표준 문자열 함수들을 이용한 겁니다.
UNICODE가 define 되면 자동으로 WCHAR으로 호환되는 함수들입니다. 참조하세요.
추가 :: 표준 문자열 함수들을 이용한 겁니다.
UNICODE가 define 되면 자동으로 WCHAR으로 호환되는 함수들입니다. 참조하세요.
fopen -> _tfopen
WCHAR -> LPCTSTR
wcslen, wcscpy, wcscmp -> lstrlen, lstrcpy, lstrcmp
printf -> _tpintf
등등..
(VC 2005 기준)WCHAR -> LPCTSTR
wcslen, wcscpy, wcscmp -> lstrlen, lstrcpy, lstrcmp
printf -> _tpintf
등등..
Tag // 프로그래밍


댓글을 달아 주세요
유니코드 문제는 참......
참다 못한 몽쉘이는 일윈을 깔기로 결심하는데.....[.....?]
음 C#이나 VB .NET은 기본적으로 유니코드일걸요?
전 뭔지 잘 모르겠습니다만, 편하게 잘 쓰고 계신 것 같네요~
진리의 윤희코드
윤희코드 만세
저에겐 어려운 ㅠㅠㅠㅠㅠㅠㅠ
굇수자식
그러고보니 댓글에있는 이미지는
모에땅 나오나오는 화의 이미지네
조금만 더 공부하셨으면 훨씬 편하셨을텐데..
Windows 계열 개발을 위한 대유니코드 헤더파일이 있습니다.
tchar.h 파일을 참고하세요.
참고로 *nix 에서는 C++ STL의 스트링을 이용하면 되구요.
*nix C 에서는 가볍게 C++로 넘어가면 됩니다.
MFC는 확인하신 대로 CString 클래스가 유니코드 처리 됩니다.
제 기억에 비주얼 베이직은 6.0 때 이미 모든게 유니코드였습니다.
C#은 당연히 유니코드.
strcpy, strcmp, strlen -> lstrcpy, lstrcmp, lstrlen
fopen_s -> tfopen_s
printf, scanf -> tprintf, tscanf
이렇게 사용하면 유니코드의 설정에 따라 소스를 수정할 필요 없음.
오오, 표준 문자열 함수인가요?
감사합니다! :)