[완료] wprintf( L"한글\n" ); 출력 깨짐
글쓴이: 오호라 / 작성시간: 수, 2007/03/21 - 3:06오후
#include<stdio.h> int main( int ac, char* av[] ) { wprintf( L"한글\n" ); wprintf( L"hello world\n" ); reutrn 0; }
한글은 깨지고, 영문은 잘 나옵니다.
?>locale
LC_ALL=ko_KR.UTF-8
LANG=ko_KR.UTF-8
?>vim .vimrc
set encoding=UTF-8
putty 설정 - UTF-8
--------------------------------
1. gcc -finput-charset=UTF-8 test.c
2. iconv -f utf-8 -t cp949 test.c -o Uni_test.c
별의 별짓 다해봐도 깨지네요. 설정 한개만 하면 될거 같은데 잘 모르겠네요.
OTL..
많은 고수님들의 조언을 부탁드립니다.
Forums:
utf8을 출력하기 위해
utf8을 출력하기 위해 별도의 평션을 사용할 필요는 없습니다.
대부분 위와 같은 경우는 vi에서 입력이 euc-kr로 만들어졌기 때문입니다.
printf로도 출력에는 문제가 없습니다.
혹 more로 소스를 출력해보면 한글이 깨져보이면 euc-kr이 맞을 겁니다.
정상적이라면 utf-8로 입력된게 맞구요...
추가로 말씀드리면 redhat9정도의 O/S를 사용하고 계신다면
set encoding=UTF-8 옵션이외에 file-encoding이라는게 하나더 있을 겁니다.
이것까지 설정을 해야만 정상적으로 UTF-8로 입력이 가능합니다.
개발자들의 궁극적 비전은 ?
ssik425님께서
ssik425님께서 지적하신대로 소스코드 자체의 인코딩도 관련이 있는걸로 알고있습니다.
코드 안에서 setlocale(3)을 사용해 보셨나요?
setlocale(LC_ALL, "ko_KR.UTF-8");
p.s) 그런데 저도 이게 올바른 해결 방법인지는 모르겠습니다. ;-)
----
jai guru deva om...
----
jai guru deva om...
질문이 있습니다.
질문이 있습니다.
혹시, xwindow 의 터미널을 열어서 작업중이신가요?
만약 그렇다면 터미널 내의 셋팅을 utf-8 로 바꾸더라도 xwindow 의 인코딩 셋이 utf-8 이 아니라면 알아 볼 수 없습니다.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
임베디드 리눅스 관련 프리렌서 지향
제가 부가적인 정보를 소홀이 했습니다. ^^;
OS : Ubuntu 6.10
터미널 : putty ( UTF-8, cp949 )
위에서 말씀하셨던 방법 다 써봤는데 안되네요. ^^;
좀더 삽질을 해봐야겠습니다.
Hello World.
결국. linux + 터미널
결국.
linux + 터미널 프로그램 + bash + C코드
이 4박자의 싸움이었습니다.
ㅠㅠ
Hello World.
어떻게
어떻게 해결하셨나요? wprintf를 쓰면 한글의 경우 그냥 ?로 나오고 있습니다.
참고로 우분투 7.10입니다
체크항목입니다.
int wprintf(const wchar_t *format, ...);
파라미터를 보시면 format만 wchar_t 입니다. ^^;
[참고]
1. 터미널 프로그램 ( putty ) 확인
> 설정->변환->[수신한 데이터를 이 문자셋으로 가정] 체크박스-> UTF-8
2. locale 확인
> LANG = ko_KR.utf8 , LC_ALL=ko_KR.utf8 ( locale -a | grep ko )
3. source 확인
3.1 wchar_t
wchar_t buff[] = L"hello world"; ( 모든 문자열에 L 붙여줌 )
> linux : sizeof(wchar_t) == 4 byte;
wchar_t buff[] = L"hello world"; ( 모든 문자열에 L 붙여줌 )
VC++ 에서 [Ctrl + F7]->프로젝트설정-> _MBCS 옆에 _UNICODE 추가해줌. ( 이왕이면 옵션에서 디버깅시 유니코드값 체크인 )
> win32 : sizeof(wchar_t) == 2byte
3.2 header file include
#include stdio.h
#include string.h
#include wchar.h
#include locale.h
3.3 setlocale call
> setlocale( LC_ALL, "korean" ); or setlocale ( LC_ALL, "ko_KR.utf8" ) ...
3.4 출력
> fputws ( wcs, stdout );
Hello World.
우분투 7.10의
우분투 7.10의 터미널이 UTF-8을 지원하지 않는걸까요? 여전히 한글이 ?로 나옵니다.
LANG값은 en_US.UTF-8로 되어있는데 ko_KR.UTF-8로 하는것과 다른결과가 나올수 있을까요?
wprintf쓸때 format앞에 L을 붙이면 되는거죠?
몇가지 더...
Hello World.
제가 두가지를
제가 두가지를 빼먹었었네요.
궁금증이 하나 더 생깁니다. UTF-8같은경우는 가변바이트인코딩인데 리눅스에서 확인해보니 wchar크기가 4바이트나 되네요.
영어 한글자를 저장하기 위해 무려 3바이트가 낭비되는건데, 실제 UTF-8프로그래밍시에도 wchar형태를 쓰나요?
각장 입맛에 맞게...
각자 취향이겠죠.
일반적으로 input이 문제죠. 입력자체가 파일이라면 BOM( byte order marks, 모든 에디터가 표준을 지키지는 않음. )으로 알수 있겠지만 fgets()와 같이 사용자 입력을 받는다면 초난감이죠. setlocale(), nl_langinfo()... 등을 이용해서 시스템 로우컬을 알아와서 처리하는 수밖에는 없죠.
처리하기전에 문자열만 순결(?)하다면 내부적으로 사용하는데 큰 어려움이 없을듯합니다.
Hello World.
제가 경험한 걸 블로그에 적은게 있는데요...
http://barami.org/archives/19
참고 되셨으면 좋겠네요 :)
댓글 달기