|
: & # 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; 자동으로 바뀌네요 글자로 ㅜㅜ
|