imbue(std::locale("chs"))

最近遇到从文本文件里面读取中文,出现乱码的问题。于是上网找了些资料,并对网上代码进行了修改。

首先,介绍下imbue函数:

imbue函数是指对象引用,表示输出时,使用的区域语言对象。
函数原型:
locale basic_ios::imbue(const locale&loc);
参数说明:
loc: const 对象引用,表示输出时,使用的区域语言对象
返回值:
之前的使用的区域语言


#include <fstream>
#include <iostream>

//
void write(std::wstring& data)
{
	std::wofstream file_;
	file_.imbue(std::locale("chs"));
	file_.open("test.txt", std::ios::out);
	file_.seekp(0, std::ios::beg);
	file_ << data.c_str();

	file_.close();
	file_.clear();
}

void read()
{
	wchar_t data[32] = { 0 };
	std::wifstream file_;
	file_.imbue(std::locale("chs"));
	file_.open("test.txt", std::ios::in);
	
	//file_ >> data;
	std::wstring sz_tmp;
	std::wcout.imbue(std::locale("chs"));
	while( !file_.eof() )
	{
		file_ >> data;		
		sz_tmp.append(data);
		sz_tmp.append(L" ");
	}
	std::wcout << sz_tmp.c_str() << std::endl;

	file_.close();
	file_.clear();
}

int main()
{
	std::wstring wstr = L"this is test demo, 这是个测试程序!";
	write(wstr);
	//
	read();

	return 0;
}


你可能感兴趣的:(imbue,stdlocale)