C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[28115] Re:한글 텍스트의 Raw 영문텍스트 알아내려면...
임문환.실업자 [origin] 46372 읽음    2003-12-04 21:44
니엘이 님이 쓰신 글 :
: 제목부터 어렵네요. ㅋ
:
: EditBox에 입력된 한글 텍스트의 영문텍스트값을 알아내려고하는데요.
: 예를 들면...
: "안녕하세요"라는 글이 입력될 경우, 이 글의 영문값(나름대로 정의)은..
: "dkssudgktpdy" 이잖아요.ㅋㅋ
:
: 이렇게 한글의 영문값을 알아내려고하는데..
: 방법이 없을까요? 이것저것 생각해봤는데.. 힘드네요.
: 물론 EditBox의 ImeMode를 imDisable로 설정해서 한글입력이 되지 않게는 해봤지만..
: 제가 필요한것은 한글 입력도 허용하지만..
: 추후 처리 과정에서 입력된 한글의 영문값을 필요로합니다.
:
: 부탁드립니다.~^^

Windows API 또는 기타 라이브러리에 이러한 기능을 하는 함수가 있는 지는 잘 모르겠으나...
일단, 한글 코드는 체계적으로 구성되어 있습니다.

조합형이 완전히 체계적인 것이므로 완성형을 조합형으로 바꾼 후에 작업을 할 수도 있겠습니다.
하지만 한글의 기본 자소에 해당하는 영문자는 결국 아래와 같이 프로그래머가 설정 해주어야 하지 않을까 생각해봅니다.


String Kor2Eng(const WideString& kor)
{
/*
가 각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛
개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷
갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓
걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯
거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 검 겁 겂 것 겄 겅 겆 겇 겈 겉 겊 겋
게 겍 겎 겏 겐 겑 겒 겓 겔 겕 겖 겗 겘 겙 겚 겛 겜 겝 겞 겟 겠 겡 겢 겣 겤 겥 겦 겧
겨 격 겪 겫 견 겭 겮 겯 결 겱 겲 겳 겴 겵 겶 겷 겸 겹 겺 겻 겼 경 겾 겿 곀 곁 곂 곃
계 곅 곆 곇 곈 곉 곊 곋 곌 곍 곎 곏 곐 곑 곒 곓 곔 곕 곖 곗 곘 곙 곚 곛 곜 곝 곞 곟
고 곡 곢 곣 곤 곥 곦 곧 골 곩 곪 곫 곬 곭 곮 곯 곰 곱 곲 곳 곴 공 곶 곷 곸 곹 곺 곻
과 곽 곾 곿 관 괁 괂 괃 괄 괅 괆 괇 괈 괉 괊 괋 괌 괍 괎 괏 괐 광 괒 괓 괔 괕 괖 괗
괘 괙 괚 괛 괜 괝 괞 괟 괠 괡 괢 괣 괤 괥 괦 괧 괨 괩 괪 괫 괬 괭 괮 괯 괰 괱 괲 괳
괴 괵 괶 괷 괸 괹 괺 괻 괼 괽 괾 괿 굀 굁 굂 굃 굄 굅 굆 굇 굈 굉 굊 굋 굌 굍 굎 굏
교 굑 굒 굓 굔 굕 굖 굗 굘 굙 굚 굛 굜 굝 굞 굟 굠 굡 굢 굣 굤 굥 굦 굧 굨 굩 굪 굫
구 국 굮 굯 군 굱 굲 굳 굴 굵 굶 굷 굸 굹 굺 굻 굼 굽 굾 굿 궀 궁 궂 궃 궄 궅 궆 궇
궈 궉 궊 궋 권 궍 궎 궏 궐 궑 궒 궓 궔 궕 궖 궗 궘 궙 궚 궛 궜 궝 궞 궟 궠 궡 궢 궣
궤 궥 궦 궧 궨 궩 궪 궫 궬 궭 궮 궯 궰 궱 궲 궳 궴 궵 궶 궷 궸 궹 궺 궻 궼 궽 궾 궿
귀 귁 귂 귃 귄 귅 귆 귇 귈 귉 귊 귋 귌 귍 귎 귏 귐 귑 귒 귓 귔 귕 귖 귗 귘 귙 귚 귛
규 귝 귞 귟 균 귡 귢 귣 귤 귥 귦 귧 귨 귩 귪 귫 귬 귭 귮 귯 귰 귱 귲 귳 귴 귵 귶 귷
그 극 귺 귻 근 귽 귾 귿 글 긁 긂 긃 긄 긅 긆 긇 금 급 긊 긋 긌 긍 긎 긏 긐 긑 긒 긓
긔 긕 긖 긗 긘 긙 긚 긛 긜 긝 긞 긟 긠 긡 긢 긣 긤 긥 긦 긧 긨 긩 긪 긫 긬 긭 긮 긯
기 긱 긲 긳 긴 긵 긶 긷 길 긹 긺 긻 긼 긽 긾 긿 김 깁 깂 깃 깄 깅 깆 깇 깈 깉 깊 깋
*/
const WideString vowels("ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ"); //21
const WideString  consonants("ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ");//30
const WideString consonants1("ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"); //19
const WideString consonants2("ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"); //27
const WideString       codes("가까나다따라마바빠사싸아자짜차카타파하");
const unsigned short consonants1Count = consonants1.Length();  //초성 갯수
const unsigned short vowelsCount = vowels.Length();            //중성 갯수
const unsigned short consonants2Count = 1+consonants2.Length();//종성 갯수
const unsigned short blockCharCount = vowelsCount * consonants2Count;
const unsigned short korCharCount = consonants1Count * blockCharCount;

// const WideString vowels("ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ"); //21
const char* const vowelEngs[]={
  "k"
  ,"o"
  ,"i"
  ,"O"
  ,"j"
  ,"p"
  ,"u"
  ,"P"
  ,"h"
  ,"hk"
  ,"ho"
  ,"hl"
  ,"y"
  ,"n"
  ,"nj"
  ,"np"
  ,"nl"
  ,"b"
  ,"m"
  ,"ml"
  ,"l"
};

//ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
const char* const consonantEngs[]={
   "r"
  ,"R"
  ,"rt"
  ,"s"
  ,"sw"
  ,"sg"
  ,"e"
  ,"E"
  ,"f"
  ,"fr"
  ,"fa"
  ,"fq"
  ,"ft"
  ,"fx"
  ,"fv"
  ,"fg"
  ,"a"
  ,"q"
  ,"Q"
  ,"qt"
  ,"t"
  ,"T"
  ,"d"
  ,"w"
  ,"W"
  ,"c"
  ,"z"
  ,"x"
  ,"v"
  ,"g"
};

//ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
// const WideString consonants1("ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"); //19
const char* const consonant1Engs[]={
  "r"
  ,"R"
  ,"s"
  ,"e"
  ,"E"
  ,"f"
  ,"a"
  ,"q"
  ,"Q"
  ,"t"
  ,"T"
  ,"d"
  ,"w"
  ,"W"
  ,"c"
  ,"z"
  ,"x"
  ,"v"
  ,"g"
};

//ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
// const WideString consonants2("ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"); //27
const char* const consonant2Engs[]={
  ""
  ,"r"
  ,"R"
  ,"rt"
  ,"s"
  ,"sw"
  ,"sg"
  ,"e"
  ,"f"
  ,"fr"
  ,"fa"
  ,"fq"
  ,"ft"
  ,"fx"
  ,"fv"
  ,"fg"
  ,"a"
  ,"q"
  ,"qt"
  ,"t"
  ,"T"
  ,"d"
  ,"w"
  ,"c"
  ,"z"
  ,"x"
  ,"v"
  ,"g"
};

String ret;
int idx;
unsigned short n,n1,n2,n3;
for(int i=0 ;i<kor.Length() ;i++)
{
  idx = vowels.Pos(WideString(kor[i]));
  if(idx>=1)
  {
   ret += vowelEngs[idx-1];
   continue;
  }
  idx = consonants.Pos(WideString(kor[i]));
  if(idx>=1)
  {
   ret += consonantEngs[idx-1];
   continue;
  }
  if(kor[i]>=codes[0] && kor[i]<(codes[0]+korCharCount))
  {
   n = (unsigned short)(kor[i]-codes[0]);
   n1 = n / blockCharCount;
   n2 = (n % blockCharCount) / consonants2Count;
   n3 = n % consonants2Count;
   ret += String(consonant1Engs[n1]);
   ret += String(vowelEngs[n2]);
   ret += String(consonant2Engs[n3]);
  }
  else
  {
   ret += String(WideString(kor[i]));
  }
}

return ret;
}

+ -

관련 글 리스트
28107 한글 텍스트의 Raw 영문텍스트 알아내려면... 니엘이 808 2003/12/04
28115     Re:한글 텍스트의 Raw 영문텍스트 알아내려면... 임문환.실업자 46372 2003/12/04
34119         Re:Re:한글 텍스트의 Raw 영문텍스트 알아내려면... 강다니엘 826 2003/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.