unicodeはどのようにASCIIに変換しますか?
ソースコードはここです!オペレーティングシステムの関数は呼び出されていませんが、コードテーブルはあげません.大きすぎます.UnicodeからGBまでのコードの問題を解決するために、私はここでコードを貼って、私のプログラムを探してFressBSD/Linuxでデバッグしないでください.Windowsユーザーはいくつかの変数タイプとヘッダファイルを修正すれば説明できます.関数名int strUnicode 2 GB(char*strSourcer,char*strDest,int n)はUnicde文字列をGBコードに変換します.戻り漢字数入力(Unicodeソース列、GB 2312/ASCIIハイブリッド符号列、Unicodeバイト数は偶数でなければなりません!!)
#include <sys/types.h>;
const unsigned short int Unicode_GB2312[][2] =
{
/*Unicode ,GB||ASCII ,MEMO*/
0x0000,0x0040,/* 0 COMMERCIAL AT @ */
0x0001,0x00A3,/* 1 POUND SIGN £ */
0x0002,0x0024,/* 2 DOLLAR SIGN $ */
0x0003,0x00A5,/* 3 YEN SIGN ¥ */
0x0004,0x00E8,/* 4 LATIN SMALL LETTER E WITH GRAVE è */
.............
.............
Google ,
[email protected]
0xFF5C,0xA3FC,/* '|' ->; 65372 */
0xFF5D,0xA3FD,/* '}' ->; 65373 */
0xFF5E,0xA1AB,/* '~' ->; 65374 */
0xFFE0,0xA1E9,/* '¢' ->; 65504 */
0xFFE1,0xA1EA,/* '£' ->; 65505 */
0xFFE3,0xA3FE,/* ' ̄' ->; 65507 */
0xFFE5,0xA3A4,/* '¥' ->; 65509 */
};
u_int16_t Unicode2GBcode(u_int16_t iUnicode)
{
int i,j,n;
switch (iUnicode){
case 0x0002:
return 0x24;
break;
case 0x000a:
return 0xa;
break;
case 0x000d:
return 0xd;
break;
case 0x0040:
return 0xA1;
break;
}
if ((iUnicode>;=0x20&&iUnicode<=0x5a)||(iUnicode>;=0x61&&iUnicode<=0x7a)) return iUnicode;
for (i=0,j=0,n=sizeof(Unicode_GB2312)/sizeof(Unicode_GB2312[0])-1;n>;0;n>;>;=1,++j){
if(Unicode_GB2312[0]==iUnicode) return Unicode_GB2312[1];
if (j>;1){
if(Unicode_GB2312[i-1][0]==iUnicode) return Unicode_GB2312[i-1][1];
if(Unicode_GB2312[i+1][0]==iUnicode) return Unicode_GB2312[i+1][1];
}
if (Unicode_GB2312[0]<iUnicode) i=i+n;
else i=i-n;
}
if(Unicode_GB2312[0]==iUnicode) return Unicode_GB2312[1];
if(Unicode_GB2312[i-1][0]==iUnicode) return Unicode_GB2312[i-1][1];
if(Unicode_GB2312[i+1][0]==iUnicode) return Unicode_GB2312[i+1][1];
return 0; //
}
/* Unicde GB , */
int strUnicode2GB(const char *strSourcer,const char *strDest,int n)
{
char cTmp;
u_int16_t hz,tmphz;
char *pSrc;
char *pDest;
int i;
for (i=0,pSrc=strSourcer,pDest=strDest;n>;0;n-=2,pSrc+=2,++i,++pDest){
hz=0;
hz=*pSrc<<8|(*(pSrc+1)&0x00FF);
tmphz=Unicode2GBcode(hz);
if (!tmphz||tmphz>;0x7F&&tmphz<0xFF){
*pDest='.';
continue;
}
else if (tmphz>;0x00&&tmphz<=0x7F){
cTmp=tmphz;
*pDest=cTmp;
}
else{
cTmp=tmphz;
*pDest=(tmphz>;>;=8);
++pDest;
*pDest=cTmp;
}
}
*pDest='/0';
return i;
}