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;
} 展开
附:源代码
#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;
} 展开
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;
}
展开全部
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中输出中文了;
大家可以检测一下
1、在编译器中设置编码方式为"system"或"GB2312"或"GBK";
2、在要输出中文的语句前加入" \b"即"空格\b",例如我要用cout输出"你好,中文",则程序可以这样写,如下;
#include<iostream>
using namespace std;
int main(void)
{
cout<<" \b你好,中文"<<endl;
return 0;
}
这样就能在cout中输出中文了;
大家可以检测一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试用 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, 参数); 好像也可以 设 置 "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 · 百度认证:广东太平洋互联网信息服务有限公司官方账号,优质数码...
关注
展开全部
解压文件出现中文乱码怎么办解决办法
华为Mate50 Pro曲面旗舰手机
¥6799
苹果 AirPods Pro 2代
¥1699
索尼65英寸4K HDR专业游戏电视
¥7499
惠普战66五代15.6英寸轻薄本
¥4399
查
看
更
多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不加Unicode应该就行了,Unicode格式读写文件比较麻烦,需要在文件头添加三个莫名的字符,具体怎么加我忘记了,你把unicode,用多字符集试试;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询