+ -
当前位置:首页 → 问答吧 → unicode、MBSC、ANSI

unicode、MBSC、ANSI

时间:2011-12-01

来源:互联网

问题一:VC++里面为什么那么多的编码方式???

问题二:如果把编码方式从“Unicode”转变为“MBSC”,从哪里修改项目的属性???

问题三:“Unicode”和“MBSC”之间的转化函数有哪些???

问题四:什么是“MBSC”编码???

问题五:“unicode、MBSC、ANSI”三种编码方式各有什么作用???

作者: starryrole   发布时间: 2011-12-01

其实你可以考虑简单点,不是unicode,就是mbcs,因为mbcs兼容ansi。

转换嘛,就是一组api, WideCharToMultiByte, MultiByteToWideChar

vc6下,去掉编译选项的MBCS, 加入UNICODE与_UNICODE 工程就变成了unicode工程。

作者: jennyvenus   发布时间: 2011-12-01

C/C++ code
//**************************************
// unicode字符串转ansi字符串
// 返回大于0成功,小于0失败
//**************************************
int
ustr_astr( WCHAR *unicodestr, char *ansistr )
{
    int result = 0;
    try
    {
        int needlen = WideCharToMultiByte( g____ansi_codepage, 0, unicodestr, -1, NULL, 0, NULL, NULL );
        if( needlen < 0 )
        {
            return needlen;
        }

        result = WideCharToMultiByte( g____ansi_codepage, 0, unicodestr, -1, ansistr, needlen + 1, NULL, NULL );
        if( result < 0 )
        {
            return result;
        }
        return ( result - 1 );
    }
    catch( ... )
    {
        ShowError();
    }
    return result;
}

//**************************************
// ansi字符串转unicode字符串
// 返回大于0成功,小于0失败
//**************************************
int
astr_ustr( char *ansistr, WCHAR *unicodestr )
{
    int result = 0;
    try
    {
        int needlen = MultiByteToWideChar( g____ansi_codepage, 0, ansistr, -1, NULL, 0 );
        if( needlen < 0 )
        {
            return needlen;
        }

        result = MultiByteToWideChar( g____ansi_codepage, 0, ansistr, -1, unicodestr, needlen );
        if( result < 0 )
        {
            return result;
        }
        return result;
    }
    catch( ... )
    {
        ShowError();
    }
    return result;
}

这是用法

作者: jennyvenus   发布时间: 2011-12-01

谢谢您。

问题一:VC++里面为什么那么多的编码方式???

问题二:如果把编码方式从“Unicode”转变为“MBSC”,从哪里修改项目的属性???

问题四:什么是“MBSC”编码???

这三个问题呢???
能再解释下吗???


作者: starryrole   发布时间: 2011-12-01

因为世界上各国最开始都独立发展了一套编码规则,所以vc6把常用的编码都支持了。

从unicode转mbcs,去掉UNICODE与_UNICODE编译选项,就变成mbcs了,vc6默认mbcs

mbcs就是 多字节编码 ,比如GB编码,英文用一个字节表示,中文用2-4个字节表示

作者: jennyvenus   发布时间: 2011-12-01

你要深究的话我记得在图书馆看到一本书叫UNICODE大全,1000多页,当时把我吓惨了。。。

你可以去看看这个!
就是一种字符编码而已

作者: aaadddzxc   发布时间: 2011-12-01