当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

unicode 如何转换为ASCII

   原码在此!没有调用任何操作系统函数,不过码表不给了,太大了!

    老是有人发信要我解决 Unicode 到 GB 的编码问题,我在此贴代码算了,免得再找我

    程序在FressBSD/Linux上调试通过,Windows 用户只要修改几个变量类型和头文件即可

    说明:函数名称
    int strUnicode2GB(char *strSourcer, char *strDest,int n)

    转换Unicde字符串到GB码,返回汉字数
    输入( Unicode 源串,GB2312/ASCII混合编码串,Unicode字节数 必须是偶数!!!)

    [code:1:0a0b72ed53]

    #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[i][0]==iUnicode) return Unicode_GB2312[i][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[i][0]<iUnicode) i=i+n;
    else i=i-n;
    }

    if(Unicode_GB2312[i][0]==iUnicode) return Unicode_GB2312[i][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; //转换不成功
    }


 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接