유니코드로 작성된 C파일을 gcc로 컴파일 시킬수 있을까요?
유니코드로 작성된 .c 문서를 gcc로 컴파일 하고 싶은데...
컴파일을 시도하면 아래와 같이 문서를 읽지 못해서 에러가 나는데
유니코드 파일을 컴파일 하게 할 수 있나요?
서버 환경은 Solaris 9.0이고 gcc는 3.3.2입니다.
소스는
#include
int main(int argc, char **argv)
{
printf("ậ ệ đ \n");
exit(0);
}
이고 유니코드로 저장하고 컴파일 하면 아래와 같이 됩니다.
[12:50:30 temp] (o^^o) $ make z
gcc -O2 -g -Wall -D_REENTRANT -I. -c z.c
z.c:1: error: stray '\377' in program
z.c:1: error: stray '\376' in program
z.c:1: error: syntax error at '#' token
z.c:1:4: warning: null character(s) ignored
z.c:1:6: warning: null character(s) ignored
z.c:1: error: parse error before "n"
z.c:1:8: warning: null character(s) ignored
z.c:1:10: warning: null character(s) ignored
z.c:1:12: warning: null character(s) ignored
z.c:1:14: warning: null character(s) ignored
z.c:1:16: warning: null character(s) ignored
z.c:1:18: warning: null character(s) ignored
z.c:1:22: warning: null character(s) ignored
z.c:1:24: warning: null character(s) ignored
z.c:1:26: warning: null character(s) ignored
z.c:1:28: warning: null character(s) ignored
z.c:1:30: warning: null character(s) ignored
유니코드를 ucs_2, ucs_4
유니코드를 ucs_2, ucs_4 같은 케릭터셋으로 표현할 경우 c style 의 null terminated string 을 사용할 수 없습니다. utf-8 이라면 상관이 없겠지만요.
ucs_2 로 된 '가' 를 변수에 집어넣는다면 아래와 같이 해야 합니다.
wchar str = 0xAC00;
"가가가" 같은 식이라면
wchar str[3] = { 0xAC00, 0xAC00, 0xAC00 };
식으로 하셔야 하구요. 아니면 아래와 같은 방식도 괜찮습니다.
unsigned char* str[3] = "0xAC0x000xAC0x00";
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
utf8이면 *영문만을
utf8이면 *영문만을 썼다는 가정하에* 가능합니다.
(단 주석은 제외, char*에 들어가는 문자열에 한글이 들어간 경우는 euckr대신 utf8인코딩으로 들어감)
하지만 utf16이나 32이면 안됩니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
utf-8 이면 변수명
utf-8 이면 변수명 같은데 한글을 사용하지 않는 이상 '한글' 이건 '영어' 이건 상관없이 잘 입력할 수 있고, 컴파일도 할 수 있습니다.
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
으음...
utf8 이라면 한글 사용 가능 할 겁니다...
http://barami.org/archives/24
제가 직접 겪어본 일인데. gcc 에서는 utf8 이라면 한글 사용 가능할 겁니다.
Re: 아마도
유니코드로 저장했다면,
문서 맨 앞에 오는 BOM 때문에 문제가 되는게 아닐까 싶네요.
(물론 이미 다른 분께서 언급하셨듯이, utf-8 이 아니라면 BOM 에 상관없이 안 될 겁니다)
http://www-online.kek.jp/~kei
http://www-online.kek.jp/~keibun/pukiwiki/index.php?MinGW%A4%CB%A4%C4%A4%A4%A4%C6
일본어로 된 문서인데 일본어 몰라도 대충 뜻은 이해가 가실 것입니다.
MinGW으로 일본어 소스를 컴파일하는 방법인데 리눅스에서도 동일한 옵션이 있을 것 같군요.
gcc -DUNICODE -finput-charset=CP932 -fexec-charset=UCS-2LE whello.c -mwindows
Linux에서 Unicode를 쓸
Linux에서 Unicode를 쓸 일이 생겨서
결과를 정리하겠습니다.
gcc의 charset에 관한 option은 다음과 같습니다.
-finput-charset
: source code(c, C, cc, cxx, cpp, h, ....) 자체를 어떤 charset으로 저장했는가
-fexec-charset
: string literal ""을 어떤 charset으로 취급할 것인가
-fwide-exec-charset
: wide string literal L""을 어떤 charset으로 취급할 것인가
___________________________________
Less is More (Robert Browning)
___________________________________
Less is More (Robert Browning)
음...
아마도 gettext() 또는 cat_open()를 쓰시는게 좋을 겁니다.
괴로움과 짜증이 가까운 미래에 찾아 올 수도...
Hello World.
댓글 달기