유니코드 값을 알면 코드페이지 알수 있나요?

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

유니코드 값을 알면 코드페이지 알수 있나요?

Post by 비회원 »

해당 국가 폰트가 깔려있으면 문자열이 깨지지 않고 출력 되도록 할려고 합니다.

유니코드 값을 알면 코드 페이지 값을 알수 있는 함수가 없나요?
MSDN 뒤져봐도 안보이네요.
zupet
Posts: 2764
Joined: 2003-05-13 03:34
Location: NCSOFT LE팀

Re: 유니코드 값을 알면 코드페이지 알수 있나요?

Post by zupet »

비회원 wrote:해당 국가 폰트가 깔려있으면 문자열이 깨지지 않고 출력 되도록 할려고 합니다.

유니코드 값을 알면 코드 페이지 값을 알수 있는 함수가 없나요?
MSDN 뒤져봐도 안보이네요.
CJK를 사용할 경우 한자에서의 구분은 특히 힘들다고 알고 있습니다. 왜냐면 한자 구간은 세 나라가 공용으로 사용하고 배열도 아주 랜덤하기 때문이죠. MSN 메신저가 이것 관련해서 몇몇 꽁수를 쓰는 걸로 보이지만 썩 보기 좋지 않습니다.(가령 일본어와 한글이 섞여 있으면 따옴표가 한쪽은 한글 것이, 한쪽은 일본어 것이 섞여버리죠.)

위와 같은 문제 때문에 저는 유니코드를 매우 싫어하지만 해결책이 없진 않다고 생각합니다. 메신저를 보고 생각한 것인데 UTF-16 즉 wchar_t 문자열에 대한 테이블을 하나 만드는 겁니다. 지원하는 폰트의 개수만큼 비트 flag 를 갖는 테이블을 만드는 겁니다. 가 8가지 정도라고 치면 unsigned char 정도의 크기에 65536개의 대한 테이블을 만드는거죠. 이정도면 64k 밖에 안되고 이 테이블에 비트 flag를 미리 offline 에서 계산해 두는 것이죠.

한개의 문자는 여러 폰트에서 지원될 수도 있고 아예 지원되지 않을 수도 있습니다. 우리가 문자열을 출력할때 이 테이블과 비교를 하여 이 폰트가 과연 출력 가능한 녀석인지 아닌지를 판단한 후 같은 폰트를 한꺼번에 찍어주고 flag가 바뀌는 순간에 그에 맞는 폰트로 변경을 해주는 것이죠. 예를 들자면 아래와 같습니다.

0x01 - 영어
0x02 - 한글
0x04 - 일어
0x08 - 간체

가나다 abcde -> [0x01][0x01][0x01][0xFF][0x01][0x01][0x01][0x01][0x01]

위에서 abcde는 편의상 0x01 로 표기를 했습니다만 폰트에서 지원한다면 한글 폰트를 계속 써도 되는 것이죠. 위와 같이 문자열을 미리 연산한 다음 찍을때만 그에 맞춰서 폰트를 바꿔가면서 쓰면 되겠죠?
비회원

답변 고맙습니다...

Post by 비회원 »

답변 고맙습니다.

폰트중에 유니코드 전체를 지원하는 하는 폰트는 혹시 없나요?

전체를 지원할려면 폰트 파일 사이즈가 너무 커질려나.... 흑...
nolimitk
Posts: 166
Joined: 2005-04-19 11:09
Contact:

Post by nolimitk »

솔직히 유니코드를 지원하는 폰트가 없다면 유니코드는 정말 쓸모없는것이 될텐데요... 플랫폼마다 포팅을 해줘야하는 Java랄까요...

분명히 있을것 같습니다.
It's da mutha fuckin' new era!
NoLimit K a.k.a. ryn.
Azyu
Posts: 35
Joined: 2005-08-04 09:17
Contact:

네, 있습니다만…

Post by Azyu »

MS에서 만든 'Arial Unicode MS'라는 폰트가 있습니다.

…근데 글자가 안 예쁩니다. OTL

자세한 사항은 http://www.alanwood.net/unicode/fonts.h ... lunicodems 링크를 참조하세용 :)
이상한 블로그 http://azyu.pe.kr/
이상한 스프링노트 http://azyu.springnote.com/
Locked