Принудительное кодирование при записи TXT-файла с ofstream - PullRequest
2 голосов
/ 08 сентября 2011

Я пишу текстовый файл, используя ofstream, по разным причинам файл должен иметь локальную кодировку, а не UTF8. Машина, которая обрабатывает файл, имеет другие локализации, чем целевая локальная.

есть ли способ принудительного кодирования при записи файла?

привет,

Илан

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Вы можете вызвать std::ios::imbue на вашем ofstream объекте, чтобы изменить локаль.Это не повлияет на глобальную локаль.

std::ofstream os("output.txt");
std::locale mylocale(""); 
os.imbue(mylocale);
os << 1.5f << std::endl;
os.close();

Обратите внимание на аргумент конструктора std::locale, он зависит от реализации.Например, немецкий язык может быть:

std::locale mylocale("de_DE"); 

или

std::locale mylocale("German"); 
0 голосов
/ 08 сентября 2011

Ну, учитывая, что это Windows, у вас все равно не будет UTF8. Но что именно ты пишешь? Обычно у вас есть std::string в памяти и вы записываете это на диск. Единственная разница в том, что \n в памяти переводится в CR / LF (\r\n) на диске. Это везде один и тот же перевод.

Вы можете столкнуться с ситуацией, когда вы пишете std::wstring. В этом случае это определяется локалью. По умолчанию используется языковой стандарт C, он же std::locale("C") or std :: locale :: classic () . The local encoding (which you seem to want) is std :: locale ("") `.

Существуют другие локали; см здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...