Contents

Develop
2015.11.10 15:49

[c] 한글 문자열 출력

Views 1682 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

영어는 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
No. Category Subject Author Date Views
1089 System/OS 무료로 HTTPS 적용하기 (Let's Encrypt) file hooni 2017.10.28 1407
1088 Etc How to completely Uninstall Coda hooni 2017.10.24 2187
1087 Etc 영어. 불규칙 동사 정리 file hooni 2017.10.04 3517
1086 System/OS [linux] iptables 초간단 세팅 스크립트 hooni 2017.09.26 1243
1085 Develop [ios] VIN Scanner (VIN barcode) 스캐너 file hooni 2017.09.16 650
1084 System/OS [mac] Homebrew/rvm/cocoapod setting hooni 2017.07.29 1003
1083 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 982
1082 Develop [android] 안드로이드 앱 문서 샘플 - NCComix file hooni 2017.07.11 2111
1081 Develop [coding] 공부해야 하는거 ㅋㅋ secret hooni 2017.06.27 0
1080 Develop [coding] Find all anagrams in a string hooni 2017.06.27 1145
1079 Etc IT감사 기법 시험 file hooni 2017.06.14 1423
1078 Develop [android] SQLiteOpenHelper를 이용한 DBManager hooni 2017.06.14 2076
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 98 Next
/ 98