C语言如何读取Unicode编码的txt中的中文?

代码如下:

    wchar_t jian[5];
    fp = _wfopen(L"D:\\vsObject\\test1\\test1\\all.txt", L"rb");
    if (fp == NULL)
    {
        printf("读取失败");
    }
    else
    {
        while (fgetws(jian, 5000, fp) != NULL)
        {
            wprintf(L"%s\n", jian);
        }
        fclose(fp);
    }

除了文本里的英文可以输出,但是中文全是问号乱码,文本为Unicode编码

4个回答

wchar_t jian[5];
这个缓冲区太小了,你文本长度应该不止5吧。

关于读取unicode的完整例子,我回答过了,看这里
https://ask.csdn.net/questions/701696

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_39466976: 你可以参考我写的代码
一年多之前 回复
qq_39466976
qq_39466976 我写的是5000,手滑写掉了
一年多之前 回复

首先我要告诉你Unicode和宽字符并不等价
你要把Unicode转成Ascii,下面是源码,请采纳:

typedef unsigned short unicode_char;     //unicode字符类型 

void Unicode2Ascii(unsigned short* src,char*tar)     //Unicode转ASCII的函数     具体不讲了 
{
    unsigned int n;
    n=WideCharToMultiByte(0,0,src,(unsigned int)-1, 0, 0,0,0);                  //官方提供的转换函数    不讲 
    WideCharToMultiByte(0,0,src,(unsigned int)-1,(unsigned char*)tar-1,n,0,0);
    tar[n]=0;
}

int main()
{   
    FILE *fp;
    fp=fopen("D:\\vsObject\\test1\\test1\\all.txt","r");      //打开文件 

    unicode_char uBuff[100];
    fgets((char*)uBuff,100,fp);     //读取文件 

    char buff[100];
    Unicode2Ascii(uBuff,buff);   //转换并保存到 buff

    printf("%s",buff);          //输出 

    getch();                        //没什么 
}

先把数据读出来,然后进行Unicode转码,转码后的就是中文

这有现成的博客。声明一下,不是我的。
https://blog.csdn.net/zaffix/article/details/7217701

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问