C/C++ wprintf输出中文乱码

最后更新于:2020-06-14 21:43:43


一.wprintf函数简介

unicode和多字节区别 文章中有介绍 :Win32 API中大部分参数有字符串的函数都有两个版本,以A结尾,代表多字节版本,以W结尾,代表Unicode版本,两者互不兼容

输出多字节字符串,使用printf ;输出宽字节字符串,使用wprintf


二.wprintf输出中文乱码

很多小伙伴表示很纳闷,为什么printf函数输出中文正常,wprintf函数输出中文怎么就乱码??

char* p1 = "C/C++教程-猿说编程";      //普通字符串 - 多字节字符串
wchar_t* p2 = L"C/C++教程-猿说编程";  //unicode字符串 - 字符串有修饰符 L
printf("p1 :%s \n", p1);
wprintf(L"p2 :%s \n", p2);

输出:
p1 :C/C++教程-猿说编程
p2 :C/C++??-????
请按任意键继续. . .


三.解决wprintf函数输出中文乱码

如果unicode字符串中含有中文,使用wprintf函数输出前通常要通过setlocale函数设置输出文字的语言区域,例如:中文

#include <Locale.h> //需要包含头文件

//以下两种方式都可以
_wsetlocale(LC_ALL, L"chs"); //chs 表示中文   方法一
setlocale(LC_ALL, "chs");    //chs 表示中文   方法二

完整代码如下:

/************************************************************************/
/*@文件名      : printf/wprintf.cpp                                                       
/*@日  期      : 2020/5/29 19:37
/*@作  者      : 猿说编程 
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : printf/wprintf区别;wprintf输出Unicode字符串
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#include <Locale.h>

int main()
{

    setlocale(LC_ALL, "chs");        // 本地化语言设置为中文,否则中文乱码

    char* p1 = "C/C++教程-猿说编程";      //普通字符串 - 多字节字符串
    wchar_t* p2 = L"C/C++教程-猿说编程";  //unicode字符串 - 字符串有修饰符 L
    printf("p1 :%s \n", p1);
    wprintf(L"p2 :%s \n", p2);


    system("pause");
    return 0;
}

输出:
p1 :C/C++教程-猿说编程
p2 :C/C++教程-猿说编程
请按任意键继续. . .


猜你喜欢

1. 三目运算符

2. 逗号表达式

3. getchar函数

4. putchar函数

5. unicode和多字节区别


转载请注明: 猿说编程 » C/C++教程 » wprintf输出中文乱码



技术交流、商务合作请直接联系博主
扫码或搜索:猿说编程

python/C++教程

猿说编程
微信公众号 扫一扫关注

赞赏

微信赞赏支付宝赞赏