急问:汉字写入文本文件的乱码问题
主要问题是:我在调用函数getCnSameW("知识管理","隐性知识",strKC),该函数将公共子串写到文件temp.txt时遇到汉字显示问题。若只有语句: fout<<strKC;则显示不出汉字
但是加上一条语句fout<<"你好(这里只要有任一汉字)";就可以将strKC也显示出来。
不知道是什么原因,该如何修改?
源文件如下:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>//注意这里不是string.h string.h是C字符串头文件
#include <iomanip>
//using namespace std;
namespace std {} using namespace std;
main(){
char strKC[100]="";
getCnSameW("知识管理","隐性知识",strKC);
}
void getCnSameW(char* str1,char* str2,char *sameW)
{
int i=0,s1=0,s2=0,k=0,m=2;
s1=strlen(str1)/2;//s1,s2为汉字串长的一半
s2=strlen(str2)/2;
sameW[0]='\0';//若无此句,strcat()无法运行,是保证sameW为数组而非字符串
char sub1[80]="";
ofstream fout("temp.txt");
for(i=0;i<s1-1;i++)
{
strncpy(sub1,str1+i*2,m*2);
if(isSubStr(sub1,str2)) //isSubStr函数只是用来看是否是子串
{
for(k=0;k<s1-2-i;k++)
{//再多看下一个汉字是否是子串
m++;
strncpy(sub1,str1+i*2,m*2);
if(!isSubStr(sub1,str2))
{
m--;
sub1[2*m]='\0';
break;//不再往下看
}
}
strcat(sameW,sub1);
for(k=0;k<m+4;k++) sub1[k]='\0';//清空数组sub1
i=m+i-1;//重新定位数组指针
m=2;//还原步长为两个汉字
}
}
fout<<sameW;
//fout<<"你好";
//问题如下: 在temp.txt文件中显示不出汉字;但是在下面加一句:fout<<"你好(只要此处有汉字)";,前面的sameW就可以正常显示。请问该怎么修改?
//问题
fout.close();
return strlen(sameW);
}
int isSubStr(char *sub2, char *str3){ //该函数只是判断sub2是否为子串
int s2=strlen(str3),l=strlen(sub2);
int j,r=0;//r为返回值,一直不等,r=0;
char tempsub[40]="1";
for(j=0;j<s2-l+1;j++){ //判断是否为子串。方法:对str2,从0位取s2个字符,一旦相等,r=l;
strncpy(tempsub,str3+j,l);
if(!strcmp(sub2,tempsub)){ //如果相等,就是子串
r=l;
// cout<<"第一个子串:"<<sub2<<endl;
break;
};
}
return r;
}