파일내 특정 한글 문자가 있는지 알아내는 프로그램을 만들고 싶어요

oliverlee의 이미지

파일에서 특정 한글 문자열이 들어 있는지 알아내는 프로그램을 C언어로 구현하고 싶습니다.
그런데 문자셋이 여러가지가 있다보니(utf-8, euc-kr, ks_c_5601-1987 등) 어떻게 해야하는지 막막합니다.

그냥 직관적으로 드는 생각으로는

"한글" 이라는 문자가 있는지 확인하고 싶다면
"한글" 이라는 문자열을 아래와 같이 헥사값으로 지정하고,

utf-8 : ED 95 9C EA B8 80
euc-kr: C7 D1 B1 DB

파일을 특정 단위(예를들어 1024 byte 단위)로 읽어서 비교해보는 것인데,,,

솔직히 문자셋도 잘 모르겠고,

특히 문제는 헥사값을 어떻게 비교해야 하는지 모르겠다는 것입니다.

만약 찾고자 하는 값이 아스키 값이면 strstr로 있는지 확인할 수 있을거 같은데,
메모리 비교하는 함수 중에 이와 유사한 함수가 있나요?

찾고자 하는 문자열이 파일에 어느부분에 위치하는지 모르기 때문에 memcmp로 찾는것도 어려울것 같고.

좋은 방법이 있을까요?


아니면 다른 좋은 방법이 있는지

조언좀 부탁드립니다.

cinsk의 이미지

C/C++로 작성하려면 iconv(3)를 써보세요.

shell script라면 대충:

#!/bin/bash
 
function guess-encoding() {
    supported=()
    input=$1
    shift
    for enc in "$@"; do
        iconv -f "$enc" -t utf-8 "$input" >/dev/null 2>&1
        if [[ $? == 0 ]]; then
            supported+=("$enc");
        fi
    done
    echo ${supported[@]}
    return 0;
}
 
 
for file in "$@"; do
    failed=0
    for enc in `guess-encoding "$file" cp949 utf-8`; do
        iconv -t ASCII -f "$enc" "$file" >/dev/null 2>&1
        if [[ $? -ne 0 ]]; then
            failed=1
            echo "$file: may have non-ASCII text"
            break;
        fi
    done
 
    if [[ $failed == 0 ]]; then
        echo "$file: contains ASCII only"
    fi
done

실행 예:

$ ./has-hangul.sh hangul.txt english.txt
hangul.txt: may have non-ASCII text
english.txt: contains ASCII only