中文string字符串写入文件C++实现

由于中文在计算机中的存储是由两位字节, unicode编码中的utf-16实现,所以无法使用常规的字符方式写入文件。

可以采用将string转换为wstring,这样每个汉字存储时使用的是一个字节,就可以循环遍历每个字节写入文件,但在笔者的几次尝试下,这种方式输出暂未找到解决文件乱码的方法。

这里采用的是当某个字节检测到为汉字时,将其紧随的字节和一个 ‘\0’ 标志,一并存到char型数组后输出到文件,从而实现中文写入文件的C++方式的实现。

ps:java有处理中文的包

void write()
{
	//string str2 = wstringtoString(str);
	//str2 = "chinaisagreatcountry";
	str2 = "大数据平台";
	FILE *fp1;
	if ((fp1 = fopen("vaguenessWords.txt", "a")) == NULL)
		cout << "open error" << endl;
	else
	{
		for (int i = 0; i < str2.size(); i++)
		{
			char s[3];
			if (str2[i] & 0x80)//如果当前节点是汉字
			{
				//一个汉字就是一个字符串,占两个字节,每个字结尾有'\0'标志,占一个字节
				s[0] = str2[i]; s[1] = str2[++i]; s[2] = '\0';
				printf("%s", s);
				fprintf(fp1, "%s", s);//写入文件
			}
			else
			{
				fprintf(fp1, "%c", str2[i]);
			}
		}
		fclose(fp1);
	}
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值