Showing posts with label 한글 프로그래밍. Show all posts
Showing posts with label 한글 프로그래밍. Show all posts

Wednesday, November 28, 2012

유니코드에서 한글의 범위 / 한글 유니코드 표

유니코드에서 한글의 범위는 AC00(44032) ~ 0xD7A3(55203) 이고 처음 부분은 다음과 같다.

다음은 한글 유니코드 표. (출처: http://www.ssial.com/278)

문자열에서 한글 받침이 있나 없나 판별하는 법

방법 :
1. 문자열이 UTF-16이 아니라면, UTF-16으로 변환
2. 문자열의 마지막 2바이트 즉 마지막 글자를 얻어서
3. 그 글자의 값이 한글코드범위(AC00~D7A3)에 속하면서
    유니코드 한글 범위 : 0xAC00(44032) ~ 0xD7A3(55203)
4. (글자값 - AC00) % 28 가 0 이 아니라면 받침이 있는 것임

원리 :
    한글코드 = 종성 + 중성*28 + 초성*588 + 44032
인데 이를 다음과 같이 변형해보면
    한글코드-44032 = 종성 + 중성*28 + 초성*588
    한글코드-44032 = 종성 + (중성 + 초성*21)*28
와 같이 된다. 따라서
    종성=(한글코드-44032)%28
가 되는것임

키워드 : 종성 유무 판단
레퍼런스 :
문자열에서 한글 종성(받침) 유무 판별하기
한글 받침의 유무를 알아내는 법..?

Friday, April 1, 2011

AppleScript 에서 한글 모아쓰기 해주는 법

질문 : 파일명을 복사할때 한글 자모가 모두 떨어지는데 모아쓰기 해주려면?
요약 : 클립보드를 이용하면 간단하다.
답 :
on myHangulMoaSSugi(txt)
set temp to the clipboard --클립보드 피신
set the clipboard to txt -- 한글 모아주기를 위해 클립보드로 옮김
set txt to the clipboard as string -- 한글 모아주기가 완성.
set the clipboard to temp -- 클립보드 restore
return txt
end myHangulMoaSSugi
키워드 : copy paste 클립보드 myHangunMoaSSugi
관련링크 : AppleScript에서 Clipboard 사용하기

Thursday, April 1, 2010

유니코드로 변환시 BOM 값의 중요성

어떤 텍스트 파일이 UTF-8인지 등을 알아내려면 첫 세 바이트의
BOM (Byte Order Mark) 를 확인하면 알 수 있는데,
EUC-KR encoding 된 것을 UNIX의 iconv를 이용해 UTF-8 로 변환할 경우,
텍스트 파일 초반의 BOM 값까지 자동으로 써지지는 않는다.

iconv 만으로 convert 한 파일은 맥파인더의 space 바를 눌러 보는
프리뷰에서는 깨져 보이는데 그것은 BOM 값이 틀려 있기 때문이다.

따라서 BOM은 알아서 별도로 써줘야 한다.
다음은 UTF-8 의 BOM 값이다.

set BOM to ((ASCII character 239) & (ASCII character 187) & (ASCII character 191))

참고자료 : 유니코드 사용시 No BOM 이란

Sunday, March 21, 2010

AppleScript에서 Clipboard 사용하기

클립보드 사용예 (한글 모아쓰기를 위해 clipboard 사용해본 예)
set the clipboard to txt -- 한글 모아주기를 위해 클립보드로 옮김
set txt to the clipboard as string -- 한글 모아주기가 완성.
-> 실제 사용할때는 원래 있던 클립보드의 내용을 피신시키는 걸 잊지 말것
http://pc-to-mac-changer.blogspot.com/2011/04/applescript.html 참조

사용예
AppleScript에서 클립보드에 원하는 텍스트를 다음과 같이 넣어줄 수 있다.
다음과 같이 한 후 텍스트 에디터에 paste하면 달력을 텍스트 형식으로 넣게 된다.
set the_text to (do shell script "cal")
set the clipboard to the_text
cal 은 UNIX 커맨드에서 달력을 표시해주는 명령인데,
이것을 이용한 것이다.

Sunday, February 14, 2010

텍스트파일 한글인코딩 자동 수정

윈도우에서 맥/Linux 로 가져온 한글 text파일 내용의 깨짐현상 한꺼번에 해결하는 법

요약 : 윈도우에서 맥으로 가져온 txt파일이나 smi파일 등을 일일이 하나씩 인코딩을 고쳐주는 것은 번거롭다. 여기서는 폴더 내의 모든 파일들의 인코딩을 한번에 유니코드로 변환하는 방법을 소개한다 (shell script 를 사용하지만 누구나 따라하면 사용가능)

한글 인코딩 문제 - EUC-KR과 UTF-8
윈도우에서 맥으로 가져온 텍스트파일이나 동영상 자막 파일들은 모두 깨져서 나온다.
그 이유는 같은 텍스트파일이라도 윈도우에서는 오늘날의 표준인 유니코드(UTF-8)를
쓰지 않고 과거의 EUC-KR 인코딩을 쓰고 있기 때문이다.
(윈도우가 하위호환성에 집착한 결과이다)

간혹 외국 자료를 받아 압축을 풀면 문자가 깨지거나 압축이 안풀리거나
때로는 압축이 아예 "damaged" 즉 손상되었다는 메시지를 내는 경우가 있는데
이것은 근본적으로 윈도우가 유니코드를 사용하지 않고 있어서 생기는 문제이다.
(그런 파일들은 맥에서 압축을 풀면 잘 풀린다)

어쨌건 윈도우에서 리눅스로, 또는 윈도우에서 맥으로 가져올 때
텍스트파일의 한글 인코딩 문제는 항상 골치아픈 문제일 수밖에 없다.

해결법 1 - 파일 하나씩 수작업 변환
이는 문제가 생기는 텍스트파일을 텍스트파일 에디터에서 로드해서
UTF-8 로 저장하면 해결되는 문제이기는 하지만, 많은 파일들을
일일이 그렇게 작업하기는 번거로운 일이다.

따라서 여기서는 shell scripting 을 이용해
폴더 내의 txt 파일이나 smi, srt 파일들을 모두 한꺼번에
유니코드로 변환하는 간단한 방법을 알아보도록 하자.

해결법 2 - 편리한 자동변환 (UNIX Shell Script 사용)

1. 우선 다음과 같은 스크립트를 짠다.
find "$1" -name "*.smi" -o -name "*.srt" -o -name "*.txt" | while read filename
do
tempName=${filename}~temp~.txt
mv "$filename" "$tempName"
iconv -c -f euc-kr -t utf-8 "$tempName" > "$filename"
rm "$tempName"
done
2. 스크립트 저장 (~/scripts/myuni 에 저장)
home 폴더에 scripts 라는 폴더를 만들어서 myuni 라는 이름의 텍스트 파일로 저장한다.
저장할 때는 UTF-8 (no BOM) 인코딩으로 저장하면 된다.

3. 패스 지정 (~/.profile 수정)
home 폴더에 .profile 이라는 텍스트 파일을 만들어서 다음과 같이 써준 후 저장한다.
export PATH=~/scripts:$PATH
.profile 파일은 hidden file 이므로 파인더에서 보이지는 않는다.

4. 사용법 (myuni [폴더명]으로 사용)
이제 끝났으므로 컴퓨터를 리붓하자.
이제는 Terminal 을 띄우고
myuni [폴더명]
이라고 실행하기만 하면 된다.
그러면 그 폴더에 있는 smi, srt, txt 파일이 모두 유니코드로 변환된다.

팁 : 원하는 폴더를 Terminal 로 drag and drop 하면 폴더경로를 전혀 타이핑 할 필요가 없다.
테스트해보지는 않았으나 리눅스 등에서도 유용한 방법이다.

주의 :
주의할 점은, 폴더 내에 UTF-8 로 인코딩돼있는 파일이 들어 있을 경우
그 파일 역시 자동변환되는데 이렇게 되면 스크립트가 EUC-KR 을 가정하므로
그런 파일은 깨져버리게 된다.
지정하는 폴더는 반드시 EUC-KR로 인코딩된 파일만 들어있는 것으로 해주도록 한다.

참고 : 윈도우 인코딩과 EUC-KR 의 엄밀한 차이점
TextWrangler 에서 윈도우에서 가져온 text 파일을 load 할 때, Korean (Windows, DOS) 인코딩으로 읽으면 잘 읽히는데 EUC-KR 인코딩으로 읽으면 못읽는다며 에러가 나는 경우가 있다. 이는 엄밀히 말하면 EUC-KR 과 윈도우 인코딩이 완전히 같은 것은 아니기 때문인데, EUC-KR 은 CP1252 이고 윈도우 인코딩은 CP949 가 정확하다고 한다. 다만 EUC-KR 즉 CP1252 은 CP949의 subset 으로, 거의 같게 봐도 무방하고 실제로 둘을 혼용해서 생각해도 별 문제는 없다.

레퍼런스 :
evolution과 팜 한글로 싱크하기
유니코드로 변환시 BOM 값의 중요성

키워드 : bash, window, encoding, korean, unicode, space, convert, 깨짐 현상, 해결법, Set Path, 폴더 내의 모든 텍스트 파일 인코딩 자동 수정하기, Linux