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

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.