如何将一个汉字用C语言将其转换成Unicode编码最好直接编成UTF-8,是不是vc里面有函数可以直接编?求程序

#include<windows.h>#include<stdio.h>#include<string.h>intmain(){charbuf[3000];scanf("... #include <windows.h>
#include <stdio.h>
#include <string.h>

int main()
{
char buf[3000];
scanf("%s",buf);
wchar_t tmpbuf[3000] = {0};
char utf8buf[3000] = {0};
int i;

MultiByteToWideChar(CP_ACP, 0, buf, -1, tmpbuf, sizeof(tmpbuf));
WideCharToMultiByte(CP_UTF8, 0, tmpbuf, -1, utf8buf, sizeof(utf8buf), NULL, NULL);
strcat(utf8buf,"1000000");
for(i=0;i<200;i++)
printf("%d",utf8buf[i]);
}
请问这个程序为什么得到的结果不是utf8码加1000000?而且utf8码都没有显示。请高手指教,谢谢
展开
 我来答
空雪梦见
推荐于2016-10-11 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1196万
展开全部

对,有。

#define _CONVERSION_USES_THREAD_LOCALE

#include <atlbase.h>
#include <atlconv.h>
#include <stdio.h>
#include <string.h>

int main()
{
    USES_CONVERSION;
    _acp = CP_ACP;
    char buf[3] = {0};
    buf[0] = getchar();
    buf[1] = getchar();
    wchar_t tmpbuf[2] = {0};
    tmpbuf[0] = A2W(buf)[0];
    _acp = CP_UTF8;
    char utf8buf[4];
    strcpy(utf8buf, W2A(tmpbuf));
    
    int i = 0;
    while(utf8buf[i] != 0)
    {
        printf("%02x ", (unsigned char)utf8buf[i]);
        ++i;
    }
    return 0;
}

如果不是VC6.0而是新的VC的话是新的写法。

你可以输入一个日进去看看

更多追问追答
追问

这是我将您的程序和我的归总的程序,我是想在主程序中输入一系列数据,然后调用utf8函数得到每个汉字的utf8二进制数据流。

结果就像这样

追答

我写了一下,发现VC6的那个字符转换里面好大的坑

它定义的W2A是:

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
        (_convert = (static_cast<int>(wcslen(_lpw))+1), \
        (_convert>INT_MAX/2) ? NULL : \
        ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), _acp))))

然而对于UTF8来说,(wcslen(xxx) + 1) * sizeof(WCHAR) 是不够的,比如“日新”,算出来是 (2+1)*2 = 6 但是实际上要用 7。

所以可能只有直接调用Windows API来转了,ATL这个旧版的库好坑。

字数超出最大允许值,请删减!

f*ck败毒知道,我传附件

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式