在C ++中以阿拉伯文名称创建文件

时间:2019-05-25 05:40:25

标签: c++ g++

我想在C ++中创建具有阿拉伯名称的文件。下面是我尝试过的程序。

#include <iostream>
#include <fstream>
#include <string>

int main() {

    const char *path="D:\\user\\c++\\files\\فثسف.txt";
    std::ofstream file(path); //open in constructor
    std::string data("Hello World");
    file << data;

    return 0;
}

但是文件使用垃圾字符创建:ÙثسÙ.txt。 我正在使用Windows平台和g ++编译器。

2 个答案:

答案 0 :(得分:0)

可以使用gcc / g ++的-fexec-charset编译器选项指定字符串文字的默认编码。

在C ++ 11和更高版本中,还可以使用字符串的u8uU前缀来指定UTF8,UTF16和UTF32编码:

const char * utf8literal = u8"This is an unicode UTF8 string! 剝Ц";
const char16_t * utf16literal = u"This is an unicode UTF16 string! 剝Ц";
const char32_t * utf32literal = U"This is an unicode UTF32 string! 剝Ц";

使用上述前缀可能会使某些不希望使用这些特定类型的字符串的函数感到不适;通常,最好设置编译器选项。

此博客文章中有关于此主题的精彩文章:http://cppwhispers.blogspot.com/2012/11/unicode-and-your-application-3-of-n.html

我希望这会有所帮助。 :)

答案 1 :(得分:0)

使用UTF8:

#include <iostream>
#include <fstream>
#include <filesystem>

int main()
{
  namespace fs = std::filesystem;
  fs::path path { u8"فثسف.txt" };
  std::ofstream file { path };

  file << "Hello World";

  return 0;
}

使用<filesystem>库可能需要其他编译器/链接器选项。 GNU实现需要与-lstdc ++ fs链接,而LLVM实现需要与-lc ++ fs链接