Создать файл на арабском имени в C ++ - PullRequest
1 голос
/ 25 мая 2019

Я хочу создать файл с арабским именем в 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 голосов
/ 25 мая 2019

Использовать 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

0 голосов
/ 25 мая 2019

Кодировку по умолчанию для строковых литералов можно указать с помощью параметра компилятора -fexec-charset для gcc / g ++.

В C ++ 11 и более поздних версиях также можно использовать u8, uU префиксы к строкам для указания кодировок 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

Надеюсь, это поможет.:)

...