如何将一个汉字用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码都没有显示。请高手指教,谢谢 展开
#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码都没有显示。请高手指教,谢谢 展开
1个回答
展开全部
对,有。
#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的话是新的写法。
你可以输入一个日进去看看
更多追问追答
追答
我写了一下,发现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败毒知道,我传附件
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询