中文编码识别通用宏

之前的文章介绍了中文编码的复杂性,做网页分析或者搜索引擎的程序员们或多或少会用到,

这里贴几个我的中文编码识别的宏,与大家分享:

 

#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

你可能感兴趣的:(搜索引擎,byte)