utf8.c
来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C语言 代码 · 共 2,062 行 · 第 1/5 页
C
2,062 行
#ifdef UTF16/* * UTF-16 vectors */struct utf16 utf16[] = { { 0x00010000, { 0xD800, 0xDC00 } }, { 0x00010001, { 0xD800, 0xDC01 } }, { 0x00010002, { 0xD800, 0xDC02 } }, { 0x00010003, { 0xD800, 0xDC03 } }, { 0x00010004, { 0xD800, 0xDC04 } }, { 0x00010007, { 0xD800, 0xDC07 } }, { 0x00010008, { 0xD800, 0xDC08 } }, { 0x0001000F, { 0xD800, 0xDC0F } }, { 0x00010010, { 0xD800, 0xDC10 } }, { 0x0001001F, { 0xD800, 0xDC1F } }, { 0x00010020, { 0xD800, 0xDC20 } }, { 0x0001003F, { 0xD800, 0xDC3F } }, { 0x00010040, { 0xD800, 0xDC40 } }, { 0x0001007F, { 0xD800, 0xDC7F } }, { 0x00010080, { 0xD800, 0xDC80 } }, { 0x00010081, { 0xD800, 0xDC81 } }, { 0x00010082, { 0xD800, 0xDC82 } }, { 0x00010084, { 0xD800, 0xDC84 } }, { 0x00010088, { 0xD800, 0xDC88 } }, { 0x00010090, { 0xD800, 0xDC90 } }, { 0x000100A0, { 0xD800, 0xDCA0 } }, { 0x000100C0, { 0xD800, 0xDCC0 } }, { 0x000100FF, { 0xD800, 0xDCFF } }, { 0x00010100, { 0xD800, 0xDD00 } }, { 0x00010101, { 0xD800, 0xDD01 } }, { 0x00010102, { 0xD800, 0xDD02 } }, { 0x00010104, { 0xD800, 0xDD04 } }, { 0x00010108, { 0xD800, 0xDD08 } }, { 0x00010110, { 0xD800, 0xDD10 } }, { 0x00010120, { 0xD800, 0xDD20 } }, { 0x00010140, { 0xD800, 0xDD40 } }, { 0x00010180, { 0xD800, 0xDD80 } }, { 0x000101FF, { 0xD800, 0xDDFF } }, { 0x00010200, { 0xD800, 0xDE00 } }, { 0x00010201, { 0xD800, 0xDE01 } }, { 0x00010202, { 0xD800, 0xDE02 } }, { 0x00010204, { 0xD800, 0xDE04 } }, { 0x00010208, { 0xD800, 0xDE08 } }, { 0x00010210, { 0xD800, 0xDE10 } }, { 0x00010220, { 0xD800, 0xDE20 } }, { 0x00010240, { 0xD800, 0xDE40 } }, { 0x00010280, { 0xD800, 0xDE80 } }, { 0x00010300, { 0xD800, 0xDF00 } }, { 0x000103FF, { 0xD800, 0xDFFF } }, { 0x00010400, { 0xD801, 0xDC00 } }, { 0x00010401, { 0xD801, 0xDC01 } }, { 0x00010402, { 0xD801, 0xDC02 } }, { 0x00010404, { 0xD801, 0xDC04 } }, { 0x00010408, { 0xD801, 0xDC08 } }, { 0x00010410, { 0xD801, 0xDC10 } }, { 0x00010420, { 0xD801, 0xDC20 } }, { 0x00010440, { 0xD801, 0xDC40 } }, { 0x00010480, { 0xD801, 0xDC80 } }, { 0x00010500, { 0xD801, 0xDD00 } }, { 0x00010600, { 0xD801, 0xDE00 } }, { 0x000107FF, { 0xD801, 0xDFFF } }, { 0x00010800, { 0xD802, 0xDC00 } }, { 0x00010801, { 0xD802, 0xDC01 } }, { 0x00010802, { 0xD802, 0xDC02 } }, { 0x00010804, { 0xD802, 0xDC04 } }, { 0x00010808, { 0xD802, 0xDC08 } }, { 0x00010810, { 0xD802, 0xDC10 } }, { 0x00010820, { 0xD802, 0xDC20 } }, { 0x00010840, { 0xD802, 0xDC40 } }, { 0x00010880, { 0xD802, 0xDC80 } }, { 0x00010900, { 0xD802, 0xDD00 } }, { 0x00010A00, { 0xD802, 0xDE00 } }, { 0x00010C00, { 0xD803, 0xDC00 } }, { 0x00010FFF, { 0xD803, 0xDFFF } }, { 0x00011000, { 0xD804, 0xDC00 } }, { 0x00011001, { 0xD804, 0xDC01 } }, { 0x00011002, { 0xD804, 0xDC02 } }, { 0x00011004, { 0xD804, 0xDC04 } }, { 0x00011008, { 0xD804, 0xDC08 } }, { 0x00011010, { 0xD804, 0xDC10 } }, { 0x00011020, { 0xD804, 0xDC20 } }, { 0x00011040, { 0xD804, 0xDC40 } }, { 0x00011080, { 0xD804, 0xDC80 } }, { 0x00011100, { 0xD804, 0xDD00 } }, { 0x00011200, { 0xD804, 0xDE00 } }, { 0x00011400, { 0xD805, 0xDC00 } }, { 0x00011800, { 0xD806, 0xDC00 } }, { 0x00011FFF, { 0xD807, 0xDFFF } }, { 0x00012000, { 0xD808, 0xDC00 } }, { 0x00012001, { 0xD808, 0xDC01 } }, { 0x00012002, { 0xD808, 0xDC02 } }, { 0x00012004, { 0xD808, 0xDC04 } }, { 0x00012008, { 0xD808, 0xDC08 } }, { 0x00012010, { 0xD808, 0xDC10 } }, { 0x00012020, { 0xD808, 0xDC20 } }, { 0x00012040, { 0xD808, 0xDC40 } }, { 0x00012080, { 0xD808, 0xDC80 } }, { 0x00012100, { 0xD808, 0xDD00 } }, { 0x00012200, { 0xD808, 0xDE00 } }, { 0x00012400, { 0xD809, 0xDC00 } }, { 0x00012800, { 0xD80A, 0xDC00 } }, { 0x00013000, { 0xD80C, 0xDC00 } }, { 0x00013FFF, { 0xD80F, 0xDFFF } }, { 0x00014000, { 0xD810, 0xDC00 } }, { 0x00014001, { 0xD810, 0xDC01 } }, { 0x00014002, { 0xD810, 0xDC02 } }, { 0x00014004, { 0xD810, 0xDC04 } }, { 0x00014008, { 0xD810, 0xDC08 } }, { 0x00014010, { 0xD810, 0xDC10 } }, { 0x00014020, { 0xD810, 0xDC20 } }, { 0x00014040, { 0xD810, 0xDC40 } }, { 0x00014080, { 0xD810, 0xDC80 } }, { 0x00014100, { 0xD810, 0xDD00 } }, { 0x00014200, { 0xD810, 0xDE00 } }, { 0x00014400, { 0xD811, 0xDC00 } }, { 0x00014800, { 0xD812, 0xDC00 } }, { 0x00015000, { 0xD814, 0xDC00 } }, { 0x00016000, { 0xD818, 0xDC00 } }, { 0x00017FFF, { 0xD81F, 0xDFFF } }, { 0x00018000, { 0xD820, 0xDC00 } }, { 0x00018001, { 0xD820, 0xDC01 } }, { 0x00018002, { 0xD820, 0xDC02 } }, { 0x00018004, { 0xD820, 0xDC04 } }, { 0x00018008, { 0xD820, 0xDC08 } }, { 0x00018010, { 0xD820, 0xDC10 } }, { 0x00018020, { 0xD820, 0xDC20 } }, { 0x00018040, { 0xD820, 0xDC40 } }, { 0x00018080, { 0xD820, 0xDC80 } }, { 0x00018100, { 0xD820, 0xDD00 } }, { 0x00018200, { 0xD820, 0xDE00 } }, { 0x00018400, { 0xD821, 0xDC00 } }, { 0x00018800, { 0xD822, 0xDC00 } }, { 0x00019000, { 0xD824, 0xDC00 } }, { 0x0001A000, { 0xD828, 0xDC00 } }, { 0x0001C000, { 0xD830, 0xDC00 } }, { 0x0001FFFF, { 0xD83F, 0xDFFF } }, { 0x00020000, { 0xD840, 0xDC00 } }, { 0x00020001, { 0xD840, 0xDC01 } }, { 0x00020002, { 0xD840, 0xDC02 } }, { 0x00020004, { 0xD840, 0xDC04 } }, { 0x00020008, { 0xD840, 0xDC08 } }, { 0x00020010, { 0xD840, 0xDC10 } }, { 0x00020020, { 0xD840, 0xDC20 } }, { 0x00020040, { 0xD840, 0xDC40 } }, { 0x00020080, { 0xD840, 0xDC80 } }, { 0x00020100, { 0xD840, 0xDD00 } }, { 0x00020200, { 0xD840, 0xDE00 } }, { 0x00020400, { 0xD841, 0xDC00 } }, { 0x00020800, { 0xD842, 0xDC00 } }, { 0x00021000, { 0xD844, 0xDC00 } }, { 0x00022000, { 0xD848, 0xDC00 } }, { 0x00024000, { 0xD850, 0xDC00 } }, { 0x00028000, { 0xD860, 0xDC00 } }, { 0x0002FFFF, { 0xD87F, 0xDFFF } }, { 0x00030000, { 0xD880, 0xDC00 } }, { 0x00030001, { 0xD880, 0xDC01 } }, { 0x00030002, { 0xD880, 0xDC02 } }, { 0x00030004, { 0xD880, 0xDC04 } }, { 0x00030008, { 0xD880, 0xDC08 } }, { 0x00030010, { 0xD880, 0xDC10 } }, { 0x00030020, { 0xD880, 0xDC20 } }, { 0x00030040, { 0xD880, 0xDC40 } }, { 0x00030080, { 0xD880, 0xDC80 } }, { 0x00030100, { 0xD880, 0xDD00 } }, { 0x00030200, { 0xD880, 0xDE00 } }, { 0x00030400, { 0xD881, 0xDC00 } }, { 0x00030800, { 0xD882, 0xDC00 } }, { 0x00031000, { 0xD884, 0xDC00 } }, { 0x00032000, { 0xD888, 0xDC00 } }, { 0x00034000, { 0xD890, 0xDC00 } }, { 0x00038000, { 0xD8A0, 0xDC00 } }, { 0x0003FFFF, { 0xD8BF, 0xDFFF } }, { 0x00040000, { 0xD8C0, 0xDC00 } }, { 0x00040001, { 0xD8C0, 0xDC01 } }, { 0x00040002, { 0xD8C0, 0xDC02 } }, { 0x00040004, { 0xD8C0, 0xDC04 } }, { 0x00040008, { 0xD8C0, 0xDC08 } }, { 0x00040010, { 0xD8C0, 0xDC10 } }, { 0x00040020, { 0xD8C0, 0xDC20 } }, { 0x00040040, { 0xD8C0, 0xDC40 } }, { 0x00040080, { 0xD8C0, 0xDC80 } }, { 0x00040100, { 0xD8C0, 0xDD00 } }, { 0x00040200, { 0xD8C0, 0xDE00 } }, { 0x00040400, { 0xD8C1, 0xDC00 } }, { 0x00040800, { 0xD8C2, 0xDC00 } }, { 0x00041000, { 0xD8C4, 0xDC00 } }, { 0x00042000, { 0xD8C8, 0xDC00 } }, { 0x00044000, { 0xD8D0, 0xDC00 } }, { 0x00048000, { 0xD8E0, 0xDC00 } }, { 0x0004FFFF, { 0xD8FF, 0xDFFF } }, { 0x00050000, { 0xD900, 0xDC00 } }, { 0x00050001, { 0xD900, 0xDC01 } }, { 0x00050002, { 0xD900, 0xDC02 } }, { 0x00050004, { 0xD900, 0xDC04 } }, { 0x00050008, { 0xD900, 0xDC08 } }, { 0x00050010, { 0xD900, 0xDC10 } }, { 0x00050020, { 0xD900, 0xDC20 } }, { 0x00050040, { 0xD900, 0xDC40 } }, { 0x00050080, { 0xD900, 0xDC80 } }, { 0x00050100, { 0xD900, 0xDD00 } }, { 0x00050200, { 0xD900, 0xDE00 } }, { 0x00050400, { 0xD901, 0xDC00 } }, { 0x00050800, { 0xD902, 0xDC00 } }, { 0x00051000, { 0xD904, 0xDC00 } }, { 0x00052000, { 0xD908, 0xDC00 } }, { 0x00054000, { 0xD910, 0xDC00 } }, { 0x00058000, { 0xD920, 0xDC00 } }, { 0x00060000, { 0xD940, 0xDC00 } }, { 0x00070000, { 0xD980, 0xDC00 } }, { 0x0007FFFF, { 0xD9BF, 0xDFFF } }, { 0x00080000, { 0xD9C0, 0xDC00 } }, { 0x00080001, { 0xD9C0, 0xDC01 } }, { 0x00080002, { 0xD9C0, 0xDC02 } }, { 0x00080004, { 0xD9C0, 0xDC04 } }, { 0x00080008, { 0xD9C0, 0xDC08 } }, { 0x00080010, { 0xD9C0, 0xDC10 } }, { 0x00080020, { 0xD9C0, 0xDC20 } }, { 0x00080040, { 0xD9C0, 0xDC40 } }, { 0x00080080, { 0xD9C0, 0xDC80 } }, { 0x00080100, { 0xD9C0, 0xDD00 } }, { 0x00080200, { 0xD9C0, 0xDE00 } }, { 0x00080400, { 0xD9C1, 0xDC00 } }, { 0x00080800, { 0xD9C2, 0xDC00 } }, { 0x00081000, { 0xD9C4, 0xDC00 } }, { 0x00082000, { 0xD9C8, 0xDC00 } }, { 0x00084000, { 0xD9D0, 0xDC00 } }, { 0x00088000, { 0xD9E0, 0xDC00 } }, { 0x0008FFFF, { 0xD9FF, 0xDFFF } }, { 0x00090000, { 0xDA00, 0xDC00 } }, { 0x00090001, { 0xDA00, 0xDC01 } }, { 0x00090002, { 0xDA00, 0xDC02 } }, { 0x00090004, { 0xDA00, 0xDC04 } }, { 0x00090008, { 0xDA00, 0xDC08 } }, { 0x00090010, { 0xDA00, 0xDC10 } }, { 0x00090020, { 0xDA00, 0xDC20 } }, { 0x00090040, { 0xDA00, 0xDC40 } }, { 0x00090080, { 0xDA00, 0xDC80 } }, { 0x00090100, { 0xDA00, 0xDD00 } }, { 0x00090200, { 0xDA00, 0xDE00 } }, { 0x00090400, { 0xDA01, 0xDC00 } }, { 0x00090800, { 0xDA02, 0xDC00 } }, { 0x00091000, { 0xDA04, 0xDC00 } }, { 0x00092000, { 0xDA08, 0xDC00 } }, { 0x00094000, { 0xDA10, 0xDC00 } }, { 0x00098000, { 0xDA20, 0xDC00 } }, { 0x000A0000, { 0xDA40, 0xDC00 } }, { 0x000B0000, { 0xDA80, 0xDC00 } }, { 0x000C0000, { 0xDAC0, 0xDC00 } }, { 0x000D0000, { 0xDB00, 0xDC00 } }, { 0x000FFFFF, { 0xDBBF, 0xDFFF } }, { 0x0010FFFF, { 0xDBFF, 0xDFFF } }};#endif /* UTF16 */static voiddump_utf8( char *word, unsigned char *utf8, char *end){ fprintf(stdout, "%s ", word); for( ; *utf8; utf8++ ) { fprintf(stdout, "%02.2x ", (unsigned int)*utf8); } fprintf(stdout, "%s", end);}static PRBooltest_ucs4_chars( void){ PRBool rv = PR_TRUE; int i; for( i = 0; i < sizeof(ucs4)/sizeof(ucs4[0]); i++ ) { struct ucs4 *e = &ucs4[i]; PRBool result; unsigned char utf8[8]; unsigned int len = 0; PRUint32 back = 0; (void)memset(utf8, 0, sizeof(utf8)); result = sec_port_ucs4_utf8_conversion_function(PR_FALSE, (unsigned char *)&e->c, sizeof(e->c), utf8, sizeof(utf8), &len); if( !result ) { fprintf(stdout, "Failed to convert UCS-4 0x%08.8x to UTF-8\n", e->c); rv = PR_FALSE; continue; } if( (len >= sizeof(utf8)) || (strlen(e->utf8) != len) || (utf8[len] = '\0', 0 != strcmp(e->utf8, utf8)) ) { fprintf(stdout, "Wrong conversion of UCS-4 0x%08.8x to UTF-8: ", e->c); dump_utf8("expected", e->utf8, ", "); dump_utf8("received", utf8, "\n"); rv = PR_FALSE; continue; } result = sec_port_ucs4_utf8_conversion_function(PR_TRUE, utf8, len, (unsigned char *)&back, sizeof(back), &len); if( !result ) { dump_utf8("Failed to convert UTF-8", utf8, "to UCS-4\n"); rv = PR_FALSE; continue; } if( (sizeof(back) != len) || (e->c != back) ) { dump_utf8("Wrong conversion of UTF-8", utf8, " to UCS-4:"); fprintf(stdout, "expected 0x%08.8x, received 0x%08.8x\n", e->c, back); rv = PR_FALSE; continue; } } return rv;}static PRBooltest_ucs2_chars( void){ PRBool rv = PR_TRUE; int i; for( i = 0; i < sizeof(ucs2)/sizeof(ucs2[0]); i++ ) { struct ucs2 *e = &ucs2[i]; PRBool result; unsigned char utf8[8]; unsigned int len = 0; PRUint16 back = 0; (void)memset(utf8, 0, sizeof(utf8)); result = sec_port_ucs2_utf8_conversion_function(PR_FALSE, (unsigned char *)&e->c, sizeof(e->c), utf8, sizeof(utf8), &len); if( !result ) { fprintf(stdout, "Failed to convert UCS-2 0x%04.4x to UTF-8\n", e->c); rv = PR_FALSE; continue; } if( (len >= sizeof(utf8)) || (strlen(e->utf8) != len) || (utf8[len] = '\0', 0 != strcmp(e->utf8, utf8)) ) { fprintf(stdout, "Wrong conversion of UCS-2 0x%04.4x to UTF-8: ", e->c); dump_utf8("expected", e->utf8, ", "); dump_utf8("received", utf8, "\n"); rv = PR_FALSE; continue; } result = sec_port_ucs2_utf8_conversion_function(PR_TRUE, utf8, len, (unsigned char *)&back, sizeof(back), &len); if( !result ) { dump_utf8("Failed to convert UTF-8", utf8, "to UCS-2\n"); rv = PR_FALSE; continue; } if( (sizeof(back) != len) || (e->c != back) ) { dump_utf8("Wrong conversion of UTF-8", utf8, "to UCS-2:"); fprintf(stdout, "expected 0x%08.8x, received 0x%08.8x\n", e->c, back); rv = PR_FALSE; continue; } } return rv;}#ifdef UTF16static PRBooltest_utf16_chars( void){ PRBool rv = PR_TRUE; int i; for( i = 0; i < sizeof(utf16)/sizeof(utf16[0]); i++ ) { struct utf16 *e = &utf16[i]; PRBool result; unsigned char utf8[8]; unsigned int len = 0; PRUint32 back32 = 0; PRUint16 back[2]; (void)memset(utf8, 0, sizeof(utf8)); result = sec_port_ucs2_utf8_conversion_function(PR_FALSE, (unsigned char *)&e->w[0], sizeof(e->w), utf8, sizeof(utf8), &len); if( !result ) { fprintf(stdout, "Failed to convert UTF-16 0x%04.4x 0x%04.4x to UTF-8\n", e->w[0], e->w[1]); rv = PR_FALSE; continue;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?