wprintf或_tprintf不显示中文和乱码问题

1.由于中文问题,宽字节编译时会遇到一些不显示或显示乱码问题

  如下列代码:  分别是WIN API写入和读取文件,测试_tprintf就会不显示

 

#include "stdafx.h"
#include <cstdlib>
#include <windows.h> 


int _tmain(int argc, _TCHAR* argv[])
{
	//写入文件
	HANDLE hFile = CreateFile(_T("test.out"),GENERIC_WRITE,FILE_SHARE_WRITE,nullptr,CREATE_ALWAYS,0,nullptr);
	DWORD dRetBytes = 0;
	TCHAR msg[] = _T("我爱你");
	//printf("写入文件");
	if (hFile != INVALID_HANDLE_VALUE)
	{
		WriteFile(hFile,msg,sizeof(msg)-1,&dRetBytes,nullptr);
		_tprintf(_T("写入文件成功!!!\r\n"));
		CloseHandle(hFile);
	}

	//读取文件
	hFile = CreateFile(_T("test.out"),GENERIC_READ,FILE_SHARE_READ,nullptr,OPEN_ALWAYS,0,nullptr);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		TCHAR line[255] = {0};
		ReadFile(hFile,line,sizeof(line),&dRetBytes,nullptr);
		if (dRetBytes != 0)
		{	
			_tprintf(_T("%s\r\n"),line);
		}
		CloseHandle(hFile);
	}
	return 0;
}


2.解决方案:包含头文件locale.h,并在程序开始调用setlocale(LC_ALL, "chs");

 

_tprintf_s或者_tprintf便能正常打印出中文字符串了:

3.添加代码如下:

 

#include <locale.h>   

_tsetlocale(LC_ALL,_T("chs"));
//setlocale(LC_ALL, "chs");

 

posted @ 2017-05-02 21:27  jadeshu  阅读(739)  评论(0编辑  收藏  举报