資源簡介
字符轉碼,gb2312 usc2 ,utf-8 隨意轉換

代碼片段和文件信息
/*************************************************************
*?文件名稱:gb2312_ucs2.c
*?功能描述: gb2312、ucs2間的轉換
*?字節序:little-endian?低地址存低字節
**************************************************************/
#include?
#include?
#define?BIT(x)?((0x01)<<(x))
typedef?unsigned?char?uchar;
const?unsigned?short?MAX_UNI_INDEX?=?6808;?/*6768*/
/*************************************************************
*功能:?十六進制基數碼表
**************************************************************/
static?const?char?radix_table[]?=?“0123456789ABCDEF“;
/*************************************************************
*功能:?ucs2_gb2312_table碼表
**************************************************************/
static?const?unsigned?short?ucs2_gb2312_table[][2];
/*************************************************************
*?語法格式:unsigned?short?gb2312_to_ucs2(unsigned?short?ucs2)
*?實現功能:gb2312轉換為ucs2
*?參數: gb2312?待轉換的gb2312編碼
*?返回值: ucs2編碼
**************************************************************/
unsigned?short?gb2312_to_ucs2(unsigned?short?gb2312)
{
int?Index;
for(Index?=?MAX_UNI_INDEX?-?1;?Index?>=?0;?Index--)
{
if(gb2312?==?ucs2_gb2312_table[Index][1])
return?ucs2_gb2312_table[Index][0];
}
return?0;
}
/*************************************************************
*?語法格式:unsigned?short?ucs2_to_gb2312(unsigned?short?ucs2)
*?實現功能:ucs2轉gb2312
*?參數: ucs2:?待轉換的ucs2編碼
*?返回值: gb2312編碼
**************************************************************/
unsigned?short?ucs2_to_gb2312(unsigned?short?ucs2)
{
int?left?=?0;
int?right?=?MAX_UNI_INDEX?-?1;
int?middle;
while(left?<=?right)
{
middle?=?(left+right)/2;
if?(ucs2?==?ucs2_gb2312_table[middle][0])
return?ucs2_gb2312_table[middle][1];
if?(ucs2?>?ucs2_gb2312_table[middle][0])
left?=?middle?+?1;
else
right?=?middle?-?1;
}
/*如果找不到漢字,則使用全角的空格代替*/
return?0xFED7;
}
/*************************************************************
*功能:
*?說明:
*?UTF-8以字節為單位對Unicode進行編碼。
*?從Unicode到UTF-8的編碼方式如下:
*?Unicode編碼(16進制)?-->?UTF-8?字節流(二進制)?
*?U-00000000?~?U-0000007F?-->?0xxxxxxx??
*?U-00000080?~?U-000007FF?-->?110xxxxx?10xxxxxx??
*?U-00000800?~?U-0000FFFF?-->?1110xxxx?10xxxxxx?10xxxxxx??
*?U-00010000?~?U-001FFFFF?-->?11110xxx?10xxxxxx?10xxxxxx?10xxxxxx??
*?U-00200000?~?U-03FFFFFF?-->?111110xx?10xxxxxx?10xxxxxx?10xxxxxx?10xxxxxx??
*?U-04000000?~?U-7FFFFFFF?-->?1111110x?10xxxxxx?10xxxxxx?10xxxxxx?10xxxxxx?10xxxxxx?
*?故根據每個漢字的第一個字節,便可以知道utf-8漢字由幾個字節組成
*************************************************************/
int?get_utf8_nbytes(unsigned?char?first_char)
{
unsigned?char?temp?=?0x080;
int?num?=?0;
if(first_char?0x80)
{
num?=?1;
}
while?(temp?&?first_char)
{
????num++;
//printf(“in?Get?num=%d\n“?num);
????temp?=?(temp?>>?1);
}
return?num;
}
/*************************************************************
*?語法格式:int?utf8_to_ucs2(const?char?*utf8)
*?實現功能:utf-8字符串轉換為unicode碼
*?參數: utf?utf-8字符串
*?返回值: unicode碼碼值
*************************************************************/
int?utf8_to_ucs
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????476664??2017-05-26?10:44??encoding\gb2312_ucs2.c
?????文件???????3143??2012-12-31?15:15??encoding\gb2312_ucs2.h
?????文件??????35224??2014-03-05?15:20??encoding\gb2312_ucs2.o
?????目錄??????????0??2017-05-06?20:17??encoding
-----------?---------??----------?-----??----
???????????????515031????????????????????4
評論
共有 條評論