Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;将非英语文本写入文件_C++_String_Fstream_Wchar T_Wstring - Fatal编程技术网

C++ c++;将非英语文本写入文件

C++ c++;将非英语文本写入文件,c++,string,fstream,wchar-t,wstring,C++,String,Fstream,Wchar T,Wstring,我看到很多关于这个话题的问题,但没有一个对我有帮助 假设我有一个字符串“հ㗑եր”或“цццц”(wchat*t,wstring,LPTSTR,或其他东西) 现在我想创建一个输出文件“res.txt”,并写下字符串。当我试图写它的时候,我没有写任何东西,“?”和一些任意数字到文件中 有人能给我建议一种保存非英语字符串的方法,以及如何正确地将它们写入文件吗 谢谢 必须使用unicode编码 这对我很有效 #include <fstream> #include <l

我看到很多关于这个话题的问题,但没有一个对我有帮助

假设我有一个字符串“հ㗑եր”或“цццц”(
wchat*t
wstring
LPTSTR
,或其他东西)

现在我想创建一个输出文件“res.txt”,并写下字符串。当我试图写它的时候,我没有写任何东西,“?”和一些任意数字到文件中

有人能给我建议一种保存非英语字符串的方法,以及如何正确地将它们写入文件吗


谢谢

必须使用unicode编码

这对我很有效

    #include <fstream>
    #include <locale>
    #include <codecvt>

    const locale utf8_locale = locale(locale(), new codecvt_utf8<wchar_t>());
    wofstream file(url);
    file.imbue(utf8_locale);
    file << L"իմբյու" << endl;
#包括
#包括
#包括
const locale utf8_locale=locale(locale(),新编码vt_utf8());
wofstream文件(url);
imbue(utf8\u语言环境);

文件在您开始创建包含非拉丁字符的文本文件之前,您必须确定要为您的区域设置使用的编码

例如,如果您的区域设置使用了
UTF-8
编码,则必须对字符串“БСССц”进行与您的区域设置为
KOI8-R
完全不同的编码

UTF-8
中的字符串“ПСССц”由八位字节(字节)表示:
d1 80 d1 83 d1 81 d1 81 d0 ba d0 b8 d0 b9
。对于
KOI8-R
locale,等效的八位字节是
d2 d5 d3 d3 cb c9 ca

国际化很难

在大多数情况下,您可以使用Unicode:C++库的宽字符流:

#include <iostream>
#include <locale>

int main()
{
    std::locale::global(std::locale(""));
    std::wcout << L"\u0440\u0443\u0441\u0441\u043a\u0438\u0439" << std::endl;
    return 0;
}
#包括
#包括
int main()
{
std::locale::global(std::locale(“”);

std::wcout您是如何编写该文件的?如果您使用的是
wchar\u t*
std::wstring
您应该使用
std::wofstream
。我尝试了,但没有任何组合帮助。因此您建议将其保留为wstring并使用wofstream?如果是,则它不会在文件上写入任何内容源文件编码方式?utf8,LATIN -1,…?怎么?你能带一个完整的例子吗?你需要用“\UXXXX”形式(Xs代表十进制数)来使用转义符。这样你就可以在代码中使用Unicode符号。不幸的是,当这些符号中有整个文本时,是非常不切实际的。C++通常都很不好地使用Unicode…(因此,如果您的整个程序都基于unicode,我可能会建议您使用一些不同的语言)哇…这是一个很强的声明。我经常使用C++,我对Unicode没有任何问题。但是它归结为你如何使用它,以及你需要什么。当我生活在Linux世界中时,大多数的字符串/文本都是UTF-8编码的,它与C++非常好。在Windows中,他们决定去UTF-16,这在C++中稍微有点复杂。资源(但是有了良好的IDE和内存,可以将每个字符串文字标记为“宽”,这应该很好),但IMO的工作非常正常,远不是“坏用”如果你计划得好,也不需要明确地和UXXXX一起工作。@ PID7G谢谢你的评论。我也这么认为。但是问题是C++在理解它方面非常复杂和复杂。下面我给出了一个答案的答案,但是我不理解它的意思。我相信还有其他的。请告诉我们如何在C++中操作UTF16,这是指函数和语法。它既不在控制台也不在TE文件中输出任何东西。那么,C++编译器或操作系统甚至不支持当前C++标准的最低要求,或者当前的区域设置不包括。西里尔字母。如果不知道编译器和系统环境的语言环境,就无法进一步确定。