VC2010中cout显示中文为乱码问题

编了一小段程序,目的是复制文本档。其中正常使用cout输出汉字可以,但当从别的文件中读出汉字时,再用cout显示就成乱码了,但输出到另一个文本文档中就正常,只是用cout... 编了一小段程序,目的是复制文本档。其中正常使用cout输出汉字可以,但当从别的文件中读出汉字时,再用cout显示就成乱码了,但输出到另一个文本文档中就正常,只是用cout显示在屏幕上的汉字是乱码。因此不像是系统文字编码问题。这个程序是用getline读入源文件中的文本,用get(ch)的方法读入源文件中的文本也是一样的结果。请问VC高手,这是怎么回事?如何解决?
附:源代码
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#define __UNICODE__ // 不加好像也可以
using namespace std;
int main()
{
ifstream infile;
ofstream outfile;
char ch;
infile.open("readme.txt",ios::in);
if(!infile)
{
cout<<"源文件没有打开!"<<endl;
getch();
return 0;
}
outfile.open("readme000.bak",ios::out|ios::trunc);
if(!infile)
{
cout<<"目标文件没有打开!"<<endl;
infile.close();
return 0;
}
// locale loc("chs");
// wcout.imbue(loc);
// wcout << L"测试1234" << endl;
// getch();
char str[200];
while(infile)
{
infile.getline(str,sizeof(infile),'\n');
outfile<<str<<endl;;
cout<<str<<endl;
}
outfile.close();
infile.close ();
getch();
return 0;
}
展开
 我来答
Adol1111
2013-07-25 · TA获得超过948个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:330万
展开全部

查看下readme.txt存储格式的问题

如果是ANSI,就没有问题

如果是UTF-8或是其他格式,就会显示乱码了

追问
你这个好像vs2010,2010早没有ANSI这个选项
追答

这个不是VS的选项,是txt文件保存时的选项,你新建一个文本文件时,保存时就可以看到了。你先打开readme.txt,然后点另存为看看编码是什么,然后选择ANSI就好了。

一定要用编程解决的话,用VC++的方法看看,标准C++我没试成功。

//#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
FILE* fp;
wchar_t utf[1000], *p = utf;
char ansi[2000];
fp = _wfopen(L"readme.txt", L"rb");
while(!feof(fp))
fread(p++, 1, 2, fp);
*--p = L'\0';
fclose(fp);
// utf+1剔除UTf-16标记
WideCharToMultiByte(CP_ACP, 0, utf + 1, -1, ansi, sizeof(ansi), NULL, NULL);
puts(ansi);
system("pause");
return 0;
}
帐号已注销
2017-06-18 · TA获得超过295个赞
知道小有建树答主
回答量:91
采纳率:100%
帮助的人:55.2万
展开全部
c++在windows下cout不能输出中文的处理方法很简单,要做两步:
1、在编译器中设置编码方式为"system"或"GB2312"或"GBK";
2、在要输出中文的语句前加入" \b"即"空格\b",例如我要用cout输出"你好,中文",则程序可以这样写,如下;
#include<iostream>
using namespace std;
int main(void)
{
cout<<" \b你好,中文"<<endl;
return 0;
}
这样就能在cout中输出中文了;
大家可以检测一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-07-26 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5734万
展开全部
试用 DOS 命令 CHCP 设定 "Code Page" .
函数 setlocale(LC_ALL, 参数); 好像也可以 设 置 "Code Page"。
中文 GB 好像 是 936。参靠下面的号码。
---------------------------
932 — Japanese
936 — Chinese (simplified) (PRC, Singapore)
949 — Korean
950 — Chinese (traditional) (Taiwan, Hong Kong)
1200 — Unicode (BMP of ISO 10646, UTF-16LE)
1201 — Unicode (BMP of ISO 10646, UTF-16BE)
65000 — Unicode (BMP of ISO 10646, UTF-7)
65001 — Unicode (BMP of ISO 10646, UTF-8)
追问
用了setlocale(LC_ALL,"chinese");
依然不行
追答
先设置好环境变量。
CHCP 号码
号码 是什么,由你用的中文码编码种类决定。

#include
setlocale (LC_ALL,""); //使用环境变量。
printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) ); //打印检查
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太平洋科技
优质机构答主

2020-12-30 · 百度认证:广东太平洋互联网信息服务有限公司官方账号,优质数码...
太平洋科技
太平洋电脑网通过分析、评测生活及工作中各类消费品,让消费者客观了解产品性能及安全状况,帮助用户做出理性购买选择。同时科普各领域产品知识,解答用户选购及使用中所遇问题。
向TA提问
展开全部

解压文件出现中文乱码怎么办解决办法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lixinjie241
2013-07-25 · 超过11用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:35.5万
展开全部
不加Unicode应该就行了,Unicode格式读写文件比较麻烦,需要在文件头添加三个莫名的字符,具体怎么加我忘记了,你把unicode,用多字符集试试;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式