--- Unicode/uni.c.orig 2004-12-03 21:04:27 +0900 +++ Unicode/uni.c 2005-01-17 02:00:06 +0900 @@ -28,10 +28,23 @@ char *offset; for (nchar /= 2; nchar > 0; nchar--, src += 2){ offset = uni2euc[src[0]] + src[1]*4; + if (( *offset == '\x3F' && *(offset+1) == '\x3F') || *offset == '\x8F' ) { + *(dst++) = '&'; + *(dst++) = '#'; + *(dst++) = 'x'; + *(dst++) = (src[0]>>4)<10 ? '0'+(src[0]>>4) : 'A'+(src[0]>>4)-10; + *(dst++) = (src[0]&15)<10 ? '0'+(src[0]&15) : 'A'+(src[0]&15)-10; + *(dst++) = (src[1]>>4)<10 ? '0'+(src[1]>>4) : 'A'+(src[1]>>4)-10; + *(dst++) = (src[1]&15)<10 ? '0'+(src[1]&15) : 'A'+(src[1]&15)-10; + *(dst++) = ';'; + *dst = '\0'; + result += 8; + } else { strncpy((char *)dst, offset, 4); len = strlen(offset); dst += len; result += len; + } } return result; } @@ -164,10 +177,23 @@ ucs2 = ((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6)| (c3 & 0x3F); } offset = uni2euc[ucs2/256] + (ucs2%256)*4; + if (( *offset == '\x3F' && *(offset+1) == '\x3F') || *offset == '\x8F' ) { + *(dst++) = '&'; + *(dst++) = '#'; + *(dst++) = 'x'; + *(dst++) = (ucs2>>12)<10 ? '0'+(ucs2>>12) : 'A'+(ucs2>>12)-10; + *(dst++) = ((ucs2>>8)&15)<10 ? '0'+((ucs2>>8)&15) : 'A'+((ucs2>>8)&15)-10; + *(dst++) = ((ucs2>>4)&15)<10 ? '0'+((ucs2>>4)&15) : 'A'+((ucs2>>4)&15)-10; + *(dst++) = (ucs2&15)<10 ? '0'+(ucs2&15) : 'A'+(ucs2&15)-10; + *(dst++) = ';'; + *dst = '\0'; + result += 8; + } else { strncpy((char *)dst, offset, 4); len = strlen(offset); dst += len; result += len; + } } return result; }