EDN首页   博客首页

日志档案

发表于 2008-6-30 14:21:16

1

标签: 无标签

俄文866编码及其与ANSI编码的转换

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщыьэюяёъ
(俄文866编码,用一个字节表示,在WORD中用西里尔文(DOS))
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 eb ec ed ee ef f1 ea
(ANSI编码,用两个字节表示,高字节全是A7,此处只写出低字节)
a1 a2 a3 a4 a5 a6 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bd be bf c0 c1 d1 d2 d3 d4 d5 d6 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ed ee ef f0 f1 d7 ec

除几个特别的字母外,ANSI编码的低字节都可以用866编码的字节加上一个偏移量来得到,下面是一个简单的C语言实现:

unsigned char ru2ansi(unsigned char rch)
{
    if(rch >= 0x80 && rch <= 0x85)
        return(rch + 0x21);
    else if(rch >= 0x86 && rch <= 0x9f)
        return(rch + 0x22);
    else if(rch >= 0xa0 && rch <= 0xa5)
        return(rch + 0x31);
    else if(rch >= 0xa6 && rch <= 0xaf)
        return(rch + 0x32);
    else if(rch >= 0xe0 && rch <= 0xef)
        return(rch + 0x02);
    else if(rch == 0xf1)
        return(0xd7);
    else
        return(rch);
}

系统分类: 资源共享   |   用户分类: 无分类   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(226)    回复(0)  

投一票您将和博主都有获奖机会!