진짜 간단한거라 올리기도 죄송시러운데 ㄷㄷ;; 한글 깨지는 것 때문입니다!
글쓴이: onam3125 / 작성시간: 일, 2012/06/10 - 9:20오후
#include <stdio.h> int main() { int i,j; int count=0; char letter[10]; printf("값 입력 ㄱㄱ : "); scanf("%s", &letter); for(i=0; i<10; i++) { if(letter[i]==NULL) { break; } else { count++; } } for(j=10-count; j>=0; j--) { printf("%c", letter[j]); } return 0; }
korea 라고 치면 aerok라고 정상출력 되는데
한글 이라고 치면 이상한 중국어가 나오네요 ;;
뭐 잘못한거죠 ㄷㄷ
Forums:
영문자는 1바이트고 한글은 2바이트라서 그런 듯
영문자는 1바이트고 한글은 2바이트라서 그런 듯 싶은데요
2바이트 문자를 입력 받았을 때는 2바이트씩 끊어서 처리하도록 고치셔야 할 듯.
피할 수 있을때 즐겨라! http://melotopia.net/b
한글을 처리하실때는 char가 아니라 wchar_t
한글을 처리하실때는 char가 아니라 wchar_t 등으로 유니코드 타입으로 처리하셔야합니다.
locale처리가 그래서 어렵지요.
http://waintman.tistory.com/3
http://waintman.tistory.com/33
참고하세요.
여러분이 답 주신 것처럼 간단한 게 아니예요.
여러분이 답 주신 것처럼 간단한 게 아니예요. 질문하신 분은 간단한 거로 생각하셨겠지만...
세벌 https://sebuls.blogspot.kr/
한글 코드
http://en.wikipedia.org/wiki/UTF-8
표를 보시면 Hangul 은 3byte입니다.
utf8,euckr, 완성형/조합형에 대한 판단을 하고 거기에 맞게 reverse시켜줘야 될것같네요.
정작 말하는 저도 한글코드에 대해서 잘 모릅니다.
별수 있나요;; 공부해야죠...
흘러가고있는 지금 이 시간에 충실하자.
http://kldp.org/node/79934 이걸
http://kldp.org/node/79934
이걸 참고하시면 될것 같습니다.
환경 설정도 중요하네요.
지금은 리눅스 머신이 없네요.
내일 출근해서 저도 해보고 다시 답글을 올리겠습니다.
저도 궁금하네요.
off-topic 이지만... 뭐 한글 문제가
off-topic 이지만...
뭐 한글 문제가 이리 복잡한 거였습니까?
저도 간단한 것 인줄 알았는데... 아...
--------
From Buenos Aires, Argentina
No sere feliz pero tengo computadora.... jaja
닥치고 Ubuntu!!!!!
To Serve My Lord Jesus
blog: http://sehoonpark.com.ar
http://me2day.net/sheep
#include #include int
이렇게 만들어봤는데요
~ $ ./a.out
한글값 입력 ㄱㄱ : 가나다
코드값~~
코드값~~
..
count=9
가나다
코드값~~
이렇게 실행이 됩니다.
즉 printf나 scanf는 코드에 상관없이 실행은 잘 됩니다.
혹시 글자가 깨지는게 터미널 설정이나 소스 파일
혹시 글자가 깨지는게 터미널 설정이나 소스 파일 자체가 utf8이 아닌 euc-kr이라서인지 확인해보세요.
터미널 설정과 소스 파일 인코딩이 동일해야 글자가 보이겠지요.
그리고 utf8 인코딩에서 한글 한 글자는 3바이트가 될 수 있다고 기억납니다. (정확히는 기억이 안납니다.)
따라서 char 타입의 배열에서 한 바이트씩 출력하면 코드값이 나오지 한글이 나올 수는 없습니다.
char 타입의 배열에서 한글을 출력하려면 다음과 같이 wchar_t 타입으로 변환해서 출력해야할것 같습니다.
세부적으로 처리하려면 utf8 스펙 등을 보거나 iconv 에서처럼 테이블로 만드는등 복잡한 처리가 필요할것 같습니다.
아니면 wprint 시리즈같이 유니코드에 대응된 라이브러리를 활용해야지요.
댓글 달기