+ unsigned int unicode;
+
+ /* Decode the UTF-8 */
+
+ if((string[i]&0xE0)==0xC0 && (string[i]&0x1F)>=2 && (string[i+1]&0xC0)==0x80)
+ {
+ /* 0000 0080-0000 07FF 110xxxxx 10xxxxxx */
+ unicode =(string[i++]&0x1F)<<6;
+ unicode|= string[i ]&0x3F;
+ }
+ else if((string[i]&0xF0)==0xE0 && (string[i+1]&0xC0)==0x80 && (string[i+2]&0xC0)==0x80)
+ {
+ /* 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx */
+ unicode =(string[i++]&0x0F)<<12;
+ unicode|=(string[i++]&0x3F)<<6;
+ unicode|= string[i ]&0x3F;
+ }
+ else if((string[i]&0xF8)==0xF0 && (string[i+1]&0xC0)==0x80 && (string[i+2]&0xC0)==0x80 && (string[i+3]&0xC0)==0x80)
+ {
+ /* 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+ unicode =(string[i++]&0x07)<<18;
+ unicode|=(string[i++]&0x3F)<<12;
+ unicode|=(string[i++]&0x3F)<<6;
+ unicode|= string[i ]&0x3F;
+ }
+ else
+ unicode=0xFFFD;
+
+ /* Output the character entity */
+