Contents

Develop
2015.11.10 15:49

[c] 한글 문자열 출력

조회 수 3140 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

영어는 1byte, 한글은 2byte 차지한다.

따라서 문자열 처리할 때 한 포인터씩 출력을 하게 되면 한글이 깨지는 현상이 발생한다.

예를 들어 한글과 영어가 섞여있는 문자열을 출력할 때 다음과 같은 소스를 이용하면 한글이 깨져서 출력된다.

 

#include <stdio.h>
#include <stdlib.h>

const int MAX_SIZE = 1000;


int main(){
    FILE *fp = fopen("test.txt","r");
    char* inp = (char*)malloc(sizeof(char)*MAX_SIZE);
    int i;

    while(fgets(inp, MAX_SIZE, fp)){

        printf("%s" , inp);

        for(i = 0 ; i < strlen(inp) ; i++){
            printf("%c  " , inp[i]) ;
        }
        printf("\n");
    }
    
    return 0;
}

 

 

그렇다면, 한글과 영어를 판단해서 영어는 1byte, 한글은 2byte를 출력해야 할텐데,

어떻게 하면 한글인지 영어인지 확인할 수 있을까?

 

#include <stdio.h>
#include <stdlib.h>

const int MAX_SIZE = 1000;

typedef enum {false, true} bool;

int main(){
    FILE *fp = fopen("test.txt","r");
    char* inp = (char*)malloc(sizeof(char)*MAX_SIZE);
    int i;
    bool HANGUL = false;


    while(fgets(inp, MAX_SIZE, fp)){

        printf("%s" , inp);

        for(i = 0 ; i < strlen(inp) ; i++){
            if((inp[i] & 0x80) == 0x80) HANGUL = true; //한글인지 확인
            if(!HANGUL)printf("%c  " , inp[i]) ; //아니면 그냥 출력
            else{
                printf("%c%c" , inp[i] , inp[i+1]); //한글이면 2byte 출력
                i++;
            }
            HANGUL = false;
        }
        printf("\n");
    }
    
    return 0;
}

 

위의 소스는 각 char 마다 한글인지 아닌지를 판단해서 한글인 경우 2byte를 출력하게 해준다.

 


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1093 Etc RSVP 란? file hooni 2017.11.22 3391
1092 Database [mysql] 중복데이터 삭제하는 초간단 쿼리 hooni 2017.11.22 5417
1091 System/OS [mac] How to uninstall MySQL on Mac OS. hooni 2017.11.08 2643
1090 System/OS OpenSSL로 ROOT CA 생성 및 SSL 인증서 발급하기 hooni 2017.10.28 3053
1089 System/OS 무료로 HTTPS 적용하기 (Let's Encrypt) file hooni 2017.10.28 3150
1088 Etc How to completely Uninstall Coda hooni 2017.10.24 4971
1087 Etc 영어. 불규칙 동사 정리 file hooni 2017.10.04 5691
1086 System/OS [linux] iptables 초간단 세팅 스크립트 hooni 2017.09.26 2706
1085 Develop [ios] VIN Scanner (VIN barcode) 스캐너 file hooni 2017.09.16 2272
1084 System/OS [mac] Homebrew/rvm/cocoapod setting hooni 2017.07.29 2663
1083 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 3496
1082 Develop [android] 안드로이드 앱 문서 샘플 file hooni 2017.07.11 4056
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 99 Next
/ 99