请考虑以下代码:
#include <iostream>
#include <boost\locale.hpp>
#include <Windows.h>
#include <fstream>
std::string ToUtf8(std::wstring str)
{
std::string ret;
int len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0, NULL, NULL);
if (len > 0)
{
ret.resize(len);
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), &ret[0], len, NULL, NULL);
}
return ret;
}
int main()
{
std::wstring wfilename = L"D://Private//Test//एउटा फोल्दर//भित्रको फाईल.txt";
std::string utf8path = ToUtf8(wfilename );
std::ifstream iFileStream(utf8path , std::ifstream::in | std::ifstream::binary);
if(iFileStream.is_open())
{
std::cout << "Opened the File\n";
//Do the work here.
}
else
{
std::cout << "Cannot Opened the file\n";
}
return 0;
}
如果我运行文件,我无法打开文件,因此进入else
块。即使使用boost::locale::conv::from_utf(utf8path ,"utf_8")
代替utf8path
也不起作用。如果考虑使用wifstream
并将wfilename
用作其参数,则代码可以正常工作,但我不想使用wifstream
。有没有办法使用其名称为utf8
编码的文件?我正在使用Visual Studio 2010
。
ifstream
,我应该如何更改代码使其正常工作?我应该使用wstring
吗? - Mahadevaifstream
,代码应该可以正常工作。我应该如何解决这个问题? - Mahadeva#ifdef
并在Windows中使用wstring
,在Linux OS中使用string
吗?还有其他的方法吗? - Mahadeva