Rel*_*lla 5 c++ unicode boost file save
我想保存一个名称?????? ???.jpg我收到一个字符串的文件(例如从文件中读取)(其中包含unicode)但我的C++代码将其保存为ÐÑÐ¸Ð²ÐµÑ ÐиÑ.jpg
我该如何正确保存?(顺便说一句,如果我只是将该字符串保存到文件中,它会正确保存,这意味着只有我保存文件名的方式是错误的.如何解决这个问题?)
这是我的文件保存代码:
void file_service::save_string_into_file( std::string contents, std::string name )
{
std::string pathToUsers = this->root_path.string() + "/users/";
boost::filesystem::path users_path ( this->root_path / "users/" );
users_directory_path = users_path;
general_util->create_directory(users_directory_path);
std::ofstream datFile;
name = users_directory_path.string() + name;
datFile.open(name.c_str(), std::ofstream::binary | std::ofstream::trunc | std::ofstream::out );
datFile.write(contents.c_str(), contents.length());
datFile.close();
}
Run Code Online (Sandbox Code Playgroud)
哪里
void general_utils::create_directory( boost::filesystem::path path )
{
if (boost::filesystem::exists( path ))
{
return;
}
else
{
boost::system::error_code returnedError;
boost::filesystem::create_directories( path, returnedError );
if ( returnedError )
{
throw std::runtime_error("problem creating directory");
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我现在有了帮助
void file_service::save_string_into_file( std::string contents, std::string s_name )
{
boost::filesystem::path users_path ( this->root_path / "users" );
users_directory_path = users_path;
general_util->create_directory(users_directory_path);
boost::filesystem::ofstream datFile;
boost::filesystem::path name (users_directory_path / s_name);
datFile.open(name, std::ofstream::binary | std::ofstream::trunc | std::ofstream::out );
datFile.write(contents.c_str(), contents.length());
datFile.close();
}
Run Code Online (Sandbox Code Playgroud)
但是当我保存文件时,它会保存文件名?????????µ?‚ ??????.jpg.我现在该怎么办?
C++标准库不支持Unicode.因此,您必须使用支持Unicode的库(如Boost.Filesystem).
或者,您必须处理特定于平台的问题.Windows支持UTF-16,因此如果您有UTF-8字符串,则需要将它们转换为UTF-16(std :: wstring).然后将它们作为文件名传递给iostream文件打开函数.Visual Studio的文件流版本可以使用wchar_t*文件名.
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |