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

2008-6-30 14:21 3976 7 7 分类: 工程师职场
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщыьэюяёъ
(俄文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);
}

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条