之前的文章介绍了中文编码的复杂性,做网页分析或者搜索引擎的程序员们或多或少会用到,
这里贴几个我的中文编码识别的宏,与大家分享:
#define IS_GB(cst) ( IN_RANGE((cst)[0], SYM_HIMIN, SYM_HIMAX) && IN_RANGE((cst)[1], SYM_LOMIN, SYM_LOMAX) )
#define IS_GBK(cst) ( IN_RANGE((cst)[0], GBK_HIMIN, GBK_HIMAX) && IN_RANGE((cst)[1], GBK_LOMIN, GBK_LOMAX) )
#define IS_GB_CODE(cst) ( IN_RANGE((cst)[0], CHAR_HIMIN, CHAR_HIMAX) && IN_RANGE((cst)[1], CHAR_LOMIN, CHAR_LOMAX) )
#define IS_GB_MARK(cst) ( IN_RANGE((cst)[0], MARK_HIMIN, MARK_HIMAX) && IN_RANGE((cst)[1], MARK_LOMIN, MARK_LOMAX) )
#define IS_GB_SMAEK(cst) ( IN_RANGE((cst)[0], SMARK_HIMIN, SMARK_HIMAX) && IN_RANGE((cst)[1], SMARK_LOMIN, SMARK_LOMAX) )
#define IS_GB_SPACE(cst) ( (((unsigned char)((cst)[0]))==SYM_HIMIN) && (((unsigned char)((cst)[1]))==SYM_LOMIN) )
#define SYM_HIMIN 0xA1 /* GB symbol : minmum value of first byte */
#define SYM_HIMAX 0xF7 /* GB symbol : maxmum value of first byte */
#define SYM_LOMIN 0xA1 /* GB symbol : minmum value of second byte */
#define SYM_LOMAX 0xFE /* GB symbol : maxmum value of second byte */
#define CHAR_HIMIN 0xB0 /* GB char : min - 1st byte */
#define CHAR_HIMAX 0xF7 /* GB char : max - 1st byte */
#define CHAR_LOMIN 0xA1 /* GB char : min - 2nd byte */
#define CHAR_LOMAX 0xFE /* GB char : max - 2nd byte */
#define CHAR_HINUM 0x48 /* (0xF7-0xB0+1) */
#define CHAR_LONUM 0x5E /* (0xFE-0xA1+1) */
#define MARK_HIMIN 0xA1 /* GB mark : min - 1st byte */
#define MARK_HIMAX 0xAF /* GB mark : max - 1st byte */
#define MARK_LOMIN 0xA1 /* GB mark : min - 2nd byte */
#define MARK_LOMAX 0xFE /* GB mark : max - 2nd byte */
#define SMARK_HIMIN 0xA3 /* simple GB mark : min - 1st byte */
#define SMARK_HIMAX 0xA3 /* simple GB mark : max - 1st byte */
#define SMARK_LOMIN 0xA1 /* simple GB mark : min - 2nd byte */
#define SMARK_LOMAX 0xFE /* simple GB mark : max - 2nd byte */
#define DIGIT_HIMIN 0xa3 /* GB 0---9 */
#define DIGIT_HIMAX 0xa3
#define DIGIT_LOMIN 0xb0
#define DIGIT_LOMAX 0xb9
#define HI_HIMIN 0xa3 /* GB A---Z */
#define HI_HIMAX 0xa3
#define HI_LOMIN 0xc1
#define HI_LOMAX 0xda
#define LOW_HIMIN 0xa3 /* GB a---z */
#define LOW_HIMAX 0xa3
#define LOW_LOMIN 0xe1
#define LOW_LOMAX 0xfa
#define GBK_HIMIN 0x81
#define GBK_HIMAX 0xfe
#define GBK_LOMIN 0x40
#define GBK_LOMAX 0xfe