한글 문제입니다.
글쓴이: slashdot / 작성시간: 월, 2006/10/23 - 8:27오후
아주 기본 지식이 없어서 헤매고 있습니다.
#include
main()
{
char buf[256]="\270\336\300\316\310\255\270\3511.bmp";
printf ("%s\n",buf);
}
의 결과로 "메인화면1.bmp" 가 찍힙니다.
제가 실제로 오픈 소스를 사용하여 한글 파일을 찍을때 위의 "메인화면1.bmp"가 나오는 것이 아니라
위의 \207... 처럼 숫자가 나옵니다.
이를 해결 하기 위한 설명 부탁드립니다 ^^
Forums:
소스를 그대로 따라
소스를 그대로 따라 쳐서 제 환경에서 해 보니 저는
메인화면1.bmp
라고 나오던데...
어떤 환경인지 좀 더 자세히 알려 주시면 답이 나올지도...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
저는 UTF-8 환경이라
저는 UTF-8 환경이라 그런지 깨져서 나오네요.
그런데 “\207... 처럼 숫자”가 나오지는 않습니다.;;
UTF-8 환경이라면
UTF-8 환경이라면 \353\251\224\354\235\270\355\231\224\353\251\264로 하셔야 되는 건가요?
결과로 메인화면1.BMP 가 나오는 거 맞고요
처음에 질문 드린거와 같이 제가 기본지식이 없어 헤매고 있습니다
위의 소스를 컴파일해서 실행시에 "메인화면1.BMP"로 한글로 출력되는 원리를 모르겠습니다.
그리고 print 하기 전에 다음과 같은 함수
char *safe_fname(const char *fname)
{
#define MAX_SAFE_NAMES 4
static char fbuf[MAX_SAFE_NAMES][MAXPATHLEN*2];
static int ndx = 0;
int limit = sizeof fbuf / MAX_SAFE_NAMES - 1;
char *t;
ndx = (ndx + 1) % MAX_SAFE_NAMES;
for (t = fbuf[ndx]; *fname; fname++) {
if (*fname == '\\') {
if ((limit -= 2) < 0)
break;
*t++ = '\\';
*t++ = '\\';
} else if (!isprint(*(uchar*)fname)) {
if ((limit -= 4) < 0)
break;
sprintf(t, "\\%03o", *(uchar*)fname);
t += 4;
} else {
if (--limit < 0)
break;
*t++ = *fname;
}
}
*t = '\0';
return fbuf[ndx];
}
를 먼저 호출하는데, 이 함수의 리턴값을 (char* ) printf 로 프린트하면
한글이 그대로 깨져서 보입니다
echo 메인화면 | od
echo 메인화면 | od -b
실행해보시면 바이트 단위로 8진수로 변환이 됩니다.
댓글 달기