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
[59950] 답변 감사합니다
박진수 [] 1007 읽음    2010-01-25 11:17
도움이 많이 되었습니다. 정말 감사합니다 ^^
힌트만 주셨어도 큰 도움이 되는데 소스까지 알려주시니 몸둘바를 모르겠네요^^;;

변환 님이 쓰신 글 :
: : & # 4 8 5 1 2 ; & # 4 7 1 9 7;
: 위에서 숫자 또는 문자 사이의 공백은 없다고 가정하고, &#과 ; 사이에 있는 숫자는 유니코드문자 번호입니다.
: 웹브라우저에서는 자동으로 처리합니다.
: 프로그램에서 처리하려면,
: "& # 4 8 5 1 2 ; & # 4 7 1 9 7;"라는 문자열이 있다고 했을 때,
: 우선 앞에서부터 차례대로 &# 또는 ;를 기준으로 문자번호를 추출합니다.
: 그런 다음 , 예를 들어 첫번째 문자번호라면 "48512"이므로 이를 숫자로 변환합니다.
: 숫자로 변환하는 함수는 StrToInt 또는 AnsiString의 ToInt 메서드가 있고 만들어 쓸 수도 있고 합니다.
: 이 숫자를 wchar_t 형의 버퍼 또는 변수 또는 WideString 형의 변수에 대입하거나 추가합니다.
: 유니코드를 다룰 수 있는 컴포넌트라면 위의 버퍼 또는 변수를 컴포넌트의 해당 속성에 대입하거나 메서드의 매개변수 넘기면 되고, 그렇지 않다면 AnsiString 형의 변수에 대입한 후 그 것을 컴포넌트의 해당 속성에 대입하거나 메서드의 매개변수로 넘겨주면 됩니다.
: AnsiString 변수에 WideString 변수를 대입하면 자동으로 유니코드를 멀티바이트 문자로 변환합니다.
: 만약 유니코드 버퍼(wchar_t[])의 내용을 파일에 저장하고자 한다면 파일의 선두에 유니코드 파일임을 나타내는 2바이트(0xFEFF)를 기록한 후 그 다음 위치에서부터 실제 내용을 저장해야 합니다.
:
: 아래 예에서 char 버퍼나 wchar_t 버퍼는 AnsiString 또는 WideString를 쓸 수도 있고 string 또는 wstring을 쓸 수도 있고 기타 여러가지 다른 방식으로 구현할 수도 있습니다.
: 또한 이 예에서는 str1의 내용을 하드코딩해두었지만 실제에 있어서는 파일이나 통신 등에서 동적으로 얻겠지요.
:
: {
:  char str1[]="& #48512 ;& #47197;"; //공백은 지우고 코딩
:  char *p1, *p2;
:  wchar_t wbuff1[3];
:  int cnt=0;
:  p1 = str1;
:  while(p1=strstr(p1,"&#"))
:  {
:   p1 += 2;
:   if(NULL==(p2=strchr(p1,';'))) break;
:   if( p2-p1>5 || p2==p1 )
:   {
:    //오류 처리 후 break 또는 계속
:    break;
:   }
:   wbuff1[cnt++] = (wchar_t)atoi(p1);
:   p1 = p2+1;
:  }
:  wbuff1[cnt] = 0;
:  Label1->Caption = wbuff1;
: }
:
:
: 박진수 님이 쓰신 글 :
: : & # 4 8 5 1 2 ; & # 4 7 1 9 7;
: :
: : 라는 글자가 "부록" 이라는 한글로 대치가 됩니다.
: :
: : 찾아보니 UTF-16LE라는 분도 있고, html 스페셜 캐릭터라는 분도 있고 한데요...
: :
: : 저는 부록 이 내용을 읽어서 사용자가 "부록" 이라는 글자로 알아볼 수 있게 만들어야 하거든요 ㅠㅠ
: :
: : 제가 지금 하는 방법은 부 에서 &# ; 빼고 숫자만 읽어서 int 형으로 선언한 후 그걸 문자로 표시하게 해놨거든요..
: :
: : 그런데 저 내용이 한두개가 아니라 엄청 많아서 하나하나 다 작업할 수 가 없네요 ㅠㅠ
: :
: : 어떻게 방법이 없을까요?
: :
: :
: :
: :
: : -----------------아래는 제가 했던 방법입니다.------------------
: :
: :
: : int a = 48512;
: : int b = 47197;
: : ShowMessage(String().sprintf("%s%s", &a, &b);
: :
: :
: :
: : 글자가 한두개면 이렇게 무식하게 해도 되는데 ㅠㅠ
: :
: : 자료 양에 따라서 몇백개, 또는 천개가 넘어 갈 수도 있어서요 ㅠㅠ
: :
: : 꼭 답이 아니더라도 힌트라도 알려주시면 감사하겠습니다 ㅠㅠ
: :
: :
: :
: : --- 수정 ---
: :
: : 헉...&# 48512; 자동으로 바뀌네요 글자로 ㅜㅜ

+ -

관련 글 리스트
59911 [수정];;문자열 변환 어떻게 하는지 모르겠어요 ㅠㅠ 박진수 1020 2010/01/22
59928     Re:[수정];;문자열 변환 어떻게 하는지 모르겠어요 ㅠㅠ 변환 1455 2010/01/23
59950         답변 감사합니다 박진수 1007 2010/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.