VS2008下面控制台下面的宽字符中文输出

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

今天碰到一个问题,就是在VS2008下面的控制台程序里面,从一个文本文件里面读取出相应的内容,中文的,然后想到控制台下面显示出来,过程都很顺利,先读取出来放到char* cpContent里面,然后利用MultiByteToWideChar转换成宽字符wchar_t * wpContent,然后利用wprintf进行输出,在调试的时候,可以看到wpContent里面存放的是中文内容,但是输出之后却显示乱码。开始不知道为什么?后来在wprintf输出之前,加了一句代码

setlocale(LC_ALL, "chs");

中文内容立马就输出成功了。


后来仔细看了一下,原来是这个样子的

setlocale:本函数用来配置地域的信息,设置当前程序使用的本地化信息。


当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的  C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。

那么就与我们要求输出的不一致了,因此要进行相应的设置setlocale(LC_ALL, "chs");


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

这个函数的参数还有其他的输入,大家可以看一下相关说明。

函数的相关定义如下(下面直接从MSDN拷贝,或者大家可以直接

VS 2008(C++)输出Helloworld 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 阅读详情

相关推荐

C++字符画玫瑰:从数学建模到控制台图形渲染的编程实践

字符画是一种利用不同字符的明暗度来模拟灰度图像的经典计算机艺术形式,其核心原理在于将二维图像离散化为字符矩阵,通过坐标映射与字符密度控制实现视觉表达。在C++编程中,实现字符画无需依赖第三方图形库,仅凭标准库即可完成,这不仅能加深对控制台I/O、循环与数组等基础语法的理解,更能锻炼从数学方程到视觉呈现的算法思维与工程实现能力。通过将玫瑰线的极坐标方程进行离散化采样,并映射到控制台的行列坐标系,开发者可以实践坐标变换、图形填充等基础图形学概念。这种技术广泛应用于数据可视化、终端界面美化及编程教学等领域。本文以

weixin_33716154的博客 593

要在vs2008中实现最基本的打印文本基本上需要以下几个步骤

要在vs2008中实现最基本的打印文本基本上需要以下几个步骤 1 新建项目(窗体) 2 在窗体上添加printDocument 控件 添加 Button textBox 控件 3 在 printDocument 控间的 PrintPage 事件中添加代码 e.Graphics.DrawString(textBox1.Text, new Font("Arial", 20, FontStyle.Bold), Brushes.Black, 150, 125); // textBox1.Text 是打印的文本内容 Arial 指定打印字体 20 指定打印字体大小 150, 125 指定在页面中的打 印 位置 4 为 button 控件添加 Click 事件 在事件中添加以下代码 PrintDialog printDialog1 = new PrintDialog(); // 声明定义 打印对话框 printDialog1.Document = printDocument1; DialogResult result =

VS2008 实现Unicode中英文换行输入文件

文件写入在Unicode条件下,尤其换行,经常出现乱码,经常有人推荐加上中文,或者选择MBCS环境,这都不是编程好习惯。本代码在VS2008测试成功。

VS从txt文件读取中文汉字产生乱码的解决办法(超简单)

通常情况下,TXT文档默认的保存方式是UTF-8的编码方式,只需要在保存TXT文档时将下面的编码方式换成ANSI即可,便能解决在VS中出现的乱码问题。

qq_44174803的博客 4620

windows程序设计的文本输出

1、文本输出函数: 最常见的文本输出函数就是:TextOut(hdc,xstart,ystart,pstring,icount);xstart和ystart参数表示字符串的起始逻辑坐标。通常,这是第一个字符的左上角坐标值,Windows就从该点开始绘制字符。调用SetTextAlign函数可以改变TextOut中xStart 和yStart参数表示的实际含义。使用TA_ LEFT、TA_ RIGH...

hua_hengixn的博客 646

VS2008使用命令行窗口输出

项目名称右键 属性 配置属性 链接器 系统 子系统 从Windows切换为控制台console

xiuNINGbuyi的博客 578

控制台程序的中文输出乱码问题

控制台程序的中文输出乱码问题,printf,wprintf与setlocale 复制代码 #include <stdio.h> #include <wchar.h> int main(void) { char str[] = “中文”; wchar_t wstr[] = L"中文"; printf(“1:%s\n”, str); wprintf(L"2:%s\n", wst...

chenrush的博客 1416

控制台程序的中文输出乱码问题,printf,wprintf与setlocale

#include #include int main(void) { char str[] = "中文"; wchar_t wstr[] = L"中文"; printf("1:%s\n", str); wprintf(L"2:%s\n", wstr); return 0; }

Star的IT专栏 1万+

[转]wcout输出中文却不显示出来

  准备使用UNICODE来写个控制台测试程序发现,cout无法输出UNICODE的中文字符。查找C++标准看到,其提供了wcin、wcout、wcerr、wclog用于处理wchar_t字符的输入输出。   在VS2008中调用wcout不显示中文字符,可以使用下面方式处理:   wcout输出时显示不了中文,加上下面这句就行了。   std::wcout.imbue(std::locale("...

weixin_33744854的博客 263

c语言实现单独显示汉字

#include #include #include #include #include //单独显示汉字,显示中文,在vs2008控制台程序中实现 int main() { wchar_t wText[]= {L"宽字符转换实例!OK!测试"}; setlocale( LC_ALL, "chs" ); wprintf(L"原宽字符串为:%s\n",wText); for(int

云守护的专栏 1587

C++ win32控制台输出宽字符串(包括汉字)

C++ win32控制台输出宽字符串(包括汉字)   原文地址:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/02686dd3417ce8063af3cf96.html   2008年08月19日 星期二 上午 10:45 以下两段代码的执行环境是 windows xp professional 英文版,

456

printf,wprintf与setlocale,char与wchar_t区别

#include &lt;stdio.h&gt; #include &lt;wchar.h&gt; int main(void) { char str[] = "中文"; wchar_t wstr[] = L"中文"; printf("1:%s\n", str); wprintf(L"2:%s\n", wstr); return 0; } Windows

a3192048的博客 1805

fstream中文路径

在C++的标准库中,std::fstream是个挺好用的文件读写流,操作文件很方便,因为是C++标准库,所以没有其它的环境依赖。在使用fstream过程中,有个打开中文路径文件会失败的问题,自己的代码中一直没处理好,这几天终于有点闲心,把这里改透。涉及很多知识点,也是个遗留已久的问题,特此做个记录。 在最后用了个一劳永逸的解决此问题方法:将fstream、FILE再包装下。 中文路径 使用fstream调试程序过程中,发现打开含中文路径的文件时,会打开失败。查了一些资料,说在VS2008vs200..

zwb0540822的专栏 2215

VS2008环境下的C++图像处理实战:从BMP读写到Sobel边缘检测

数字图像处理是计算机视觉和图形学的基础技术,其核心在于对像素矩阵进行数学运算以实现增强、分析和理解。从原理上讲,它涉及空间域与频域的变换、卷积滤波、边缘检测等算法。这些技术的工程价值在于能将抽象的数学公式转化为稳定、高效的代码,直接应用于工业检测、医学影像、安防监控等场景。本文聚焦于在经典的Visual Studio 2008开发环境中,从零实现一套不依赖大型库的C++图像处理框架。内容涵盖BMP文件格式的解析、像素级操作、灰度化、均值与中值滤波,以及Sobel算子的实现与优化,特别针对VS2008的工程配

weixin_30765577的博客 306

VC++的Unicode编程(宏UNICODE与_UNICODE

于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312—80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示,以区分ASCII码部分。在Unicode里,所有的字符被一视同仁,汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,也就是说,所有的文字都按一个字符来处理,它们都有一个唯一的Unicode码。在ANSI中,一个字符(char)的长度为一个字节(Byte)。

kupePoem的专栏 1252
上一篇: 堆和栈的区别(转过无数次的文章)
下一篇: char 与 wchar_t 区别
凌枫
博客等级 码龄19年 22粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值