|
니엘이 님이 쓰신 글 :
: 제목부터 어렵네요. ㅋ
:
: 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;
}
|