static unsigned long ToUtf8Ch(wchar_t ch)
{
unsigned long ret;
if ( ch > 0x7F ) // ANSI
{
if ( ch > 0x7FF ) // MB
{
if ( ch > 0xffff ) // Long
{
// 이거 이상이 wchar_t에선 없음
ret = (ch >> 18) | 0xF0;
ret <<= 8;
ret |= ((ch >> 12) & 0x3F) | 0x80;
ret <<= 8;
ret |= ((ch >> 6) & 0x3F) | 0x80;
ret <<= 8;
ret |= (ch & 0x3F) | 0x80;
}
else
{
ret = (ch >> 12) | 0xE0;
ret <<= 8;
ret |= ((ch >> 6) & 0x3F) | 0x80;
ret <<= 8;
ret |= (ch & 0x3F) | 0x80;
}
}
else
{
// 2 Bytes Code
ret = (ch >> 6) | 0xC0;
ret <<= 8;
ret |= (ch & 0x3F) | 0x80;
}
}
else
{
// ASNI Code
ret = ch;
}
return ret;
}
CQlzdGF0aWMgdW5zaWduZWQgbG9uZyBUb1V0ZjhDaCh3Y2hhcl90IGNoKQoJCXsKCQkJdW5zaWduZWQgbG9uZyByZXQ7CgkJCWlmICggY2ggPiAweDdGICkgLy8gQU5TSQoJCQl7CgkJCQlpZiAoIGNoID4gMHg3RkYgKSAvLyBNQgoJCQkJewoJCQkJCWlmICggY2ggPiAweGZmZmYgKSAvLyBMb25nCgkJCQkJewoJCQkJCQkvLyDsnbTqsbAg7J207IOB7J20IHdjaGFyX3Tsl5DshKAg7JeG7J2MCgkJCQkJCXJldCA9IChjaCA+PiAxOCkgICAgICAgICAgIHwgMHhGMDsKCQkJCQkJcmV0IDw8PSA4OwoJCQkJCQlyZXQgfD0gKChjaCA+PiAxMikgJiAweDNGKSB8IDB4ODA7CgkJCQkJCXJldCA8PD0gODsKCQkJCQkJcmV0IHw9ICgoY2ggPj4gNikgJiAweDNGKSAgfCAweDgwOwoJCQkJCQlyZXQgPDw9IDg7CgkJCQkJCXJldCB8PSAoY2ggJiAweDNGKSAgICAgICAgIHwgMHg4MDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJcmV0ID0gKGNoID4+IDEyKSAgICAgICAgICB8IDB4RTA7CgkJCQkJCXJldCA8PD0gODsKCQkJCQkJcmV0IHw9ICgoY2ggPj4gNikgJiAweDNGKSB8IDB4ODA7CgkJCQkJCXJldCA8PD0gODsKCQkJCQkJcmV0IHw9IChjaCAmIDB4M0YpICAgICAgICB8IDB4ODA7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vIDIgQnl0ZXMgQ29kZQoJCQkJCXJldCA9IChjaCA+PiA2KSAgIHwgMHhDMDsKCQkJCQlyZXQgPDw9IDg7CgkJCQkJcmV0IHw9IChjaCAmIDB4M0YpIHwgMHg4MDsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIEFTTkkgQ29kZQoJCQkJcmV0ID0gY2g7CgkJCX0KCQkJcmV0dXJuIHJldDsKCQl9