|
^^ 이번엔 훨씬 알기쉽게 질문을 하셨네요.
즉슨, 유니코드 문자 코드로부터 초중종성 값을 얻고싶으신거군요.
다음 두 코드를 보세요.
UnicodeString sU = L"감사합니다"; // UTF-16
AnsiString sA = "감사합니다"; // 완성형코드
실제 내용을 브레이크포인트를 걸어 조사해 보면
sU: AC10 C0AC D569 B2C8 B2E4
sA: B0A8 BBE7 C7D5 B4CF B4D9
즉... 님이 말씀하신 B0A8은 유니코드값이 아닌 완성형 코드입니다. 자모 분석을 하시려면 UnicodeString에 대입을 하시면 되고 바이트 단위로 얻는건 현재 사용하는 방법으로 하셔도 되겠고
BYTE *pStr = (BYTE*)sU.w_str();
이런식으로 포인터를 얻어 스캔해 보셔도 되겠네요.
한가지 첨언을 하자면 전송하는 데이터에 한글보다 영어가 압도적으로 많다면 굳이 영어인지 한글인지 구분하는 루틴을 넣는 것 보다는 UTF-8로 인코딩해서 전송하는 편이 깔끔할겁니다.
궁금이 님이 쓰신 글 :
: 우선 답변 감사합니다
: 질문을 님 말씀대로 좀 정리해야겠네요...
:
: 1. 아래처럼 조합형으로 만들어진 유니코드입니다.
: ================================================
: 유니코드 2.0의 한글 코드
: 한글 음절: 0xAC00 ~ 0xD7A3 (11172 자)
:
: V = {[(Cho_i X 21)+ Jung_i]*28}+ Jong_i + 0xAC00
: V : 유니코드 값 Cho_i: 초성 인덱스값 Jung_i : 중성 인덱스값 Jong_i : 종성 인덱스 값
:
: 조합형 코드: 초성(19개) × 중성(21개) × 종성(28개)
: → 자모 조합과 자모 분리가 용이하다.
: 모든 현대 한글 표현 가능 (KS-C-5601의 한글 음절 모두 포함)
: 유니코드 2.0은 유니코드 1.1과 한글 표현 방식이 달라서 서로 호환되지 않는다.
: 부코드 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
: 초성 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
: 중성 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
: 종성 없음 ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ
: ===============================================
: 2. 위 처럼 제가 Edit에 쓴 글자 하나하나에 대한 값을 얻고 싶습니다.
: ex)
: : : 감 : AC 10 =>{[(0 X 21)+ 0]*28}+ 16 + 0xAC00 = 44048
: : : 사 : C0 AC => 49324
: : : 합 : D5 69 => 54633
: : : 니 : B2 C8 => 45768
: : : 다 : B2 E4 => 45796
:
: 3. 위 값을 byte 형으로 받고 싶어요
: ex) 감 : Buff[0] = HIBYTE(44048); <== 0xAC
: Buff[1] = LOBYTE(44048); <== 0x10
:
: 4. 위처럼 감이란 글씨에 대해서 AC10 이란 값을 원하는데 B0A8 이런 값이 들어가 버리네요...
:
: 질문이 너무 길어져버렸네요...
: 위처럼 하려는 이유는 제가 edit에 쓴 스트링 값을 한글 같은경우 위처럼 유니코드값으로 영어는 해당 아스키값으로 전송하고자 함입니다...
:
: 이번에도 너무 제입장으로 글을 썼나요.... -.-;;
:
: -------------------------------------------------------------------------------------------------
:
: 김상구.패패루 님이 쓰신 글 :
: : 질문을 이해하기도 어렵게 작성하셔서... 좋은 답글 달리긴 어려워 보이네요. ^^
: : 질문의 요지가 뭔가요?
: :
: : 2009이상 버전을 사용하시고 있다면
: : Edit1->Text = L"감사합니다!ABCD#★←♤";
: : 혹은
: : Edit1->Text = U"감사합니다!ABCD#★←♤";
: :
: :
: : 라고만 하셔도 정확하게 UTF-16LE로 저장됩니다. L이나 U를 빼먹지 마세요.
: :
: : 참고로... 질문 자체의 문제를 지적하자면
: : 1. 유니코드라고 하시는데 구체적으로 어떤 인코딩을 말씀하시나요? UTF-16LE? UTF-8? 구체적으로 밝히셔야 합니다.
: : 2. '이값'이 대체 뭔가요?
: : 3. 그냥 버퍼란? char 문자열 버퍼를 말씀하시는지 wchar_t 문자열 버퍼를 말씀하시는지
: : 4. 제대로 들어가지 않는다는게 어떻게 제대로 들어가지 않는다는지... 즉, 기대하고 있던건 어떤 인코딩인데 실제 들어간건 어떤 인코딩인거 같다... 이런식으로...
: :
: : 답변 작성자가 님께서 적으신 바이너리값을 각각의 코드표와 일일이 대조해 가면서 답변을 적을만큼 널널할꺼라 생각하시면 오산입니다.
: :
: :
: :
: : 궁금이 님이 쓰신 글 :
: : : Edit1->Text = "감사합니다!ABCD#★←♤"; 이와 같은값이 들어있다치면
: : :
: : : 입력한 스트링값에서 한글은 유니코드로 영문이나 특수문자는 그에 해당하는
: : :
: : : 이값을 구하고 싶습니다
: : :
: : : 그냥 버퍼에 스트링값을 넣어보니 !표나 ABCD 같은 아스키값은 잘 들어가는데
: : :
: : : 한글과 특수문자들의 값이 제대로 들어가질 않습니다
: : :
: : : MultiByteToWideChar 를 써보아도 마찬가지네요,,,
: : :
: : : 감 사 합 니 다 ! A B C D # ★ ← ♤
: : : B0 A8 BB E7 C7 D5 B4 CF B4 D9 21 41 42 43 44 23 A1 DA A1 E7 A2 BB <--- 이런값이 들어가네요
: : :
: : : 원하는값은
: : : 감 : AC 10
: : : 사 : C0 AC
: : : 합 : D5 69
: : : 니 : B2 C8
: : : 다 : B2 E4 <-- 입니다..
: : : 특수문자는 유니코드값이 어떻게 되는지 정확한 값을 알수가없네요... 유니코드 구하는 루틴을 함께쓰면되나요??
: : :
: : : 하루 종일 삽질하고 있네요 도와주세요
|