Xét đoạn mã sau:mở utf8 mã hóa tên tập tin trong C++ của Windows
#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;
}
Nếu tôi chạy các tập tin, tôi không thể mở các tập tin do đó bước vào khối else
. Ngay cả khi sử dụng boost::locale::conv::from_utf(utf8path ,"utf_8")
thay vì utf8path
không hoạt động. Mã hoạt động nếu tôi xem xét sử dụng wifstream
và sử dụng wfilename
làm thông số của nó, nhưng tôi không muốn sử dụng wifstream
. Có cách nào để mở tệp có tên là utf8
được mã hóa không? Tôi đang sử dụng Visual Studio 2010
.
Không có API Windows nào bên dưới sử dụng UTF8. std :: ifstream cuối cùng sẽ gọi CreateFileA hoặc CreateFileW để mở tệp, các chức năng này mất UTF8. –
Vì vậy, nếu tôi sẽ sử dụng 'ifstream' làm thế nào tôi nên thay đổi mã để làm cho nó hoạt động. Tôi có nên sử dụng 'wstring' – Pant
Điều này là tôi đang cố gắng làm cho nền tảng mã chéo. Vì Linux đã được unicode nhận thức, mã có lẽ nên làm việc nếu tôi sử dụng 'ifstream'. Tôi nên giải quyết tình huống này như thế nào? – Pant