使用fstream以中文/日语编写的文本,但无法正确读取文件

时间:2019-06-10 02:04:34

标签: c++

我正在尝试使用cin使用fstream将用户文本(普通文本)输入到txt文件中。但是文字是汉字,再读一次会显示随机的字母。

char entry[10000];
std::fstream file;

file.open ("a1bc3.txt", std::ios::out | std::ios::in );

if (file.is_open()){
    std::cin >> entry;
}
else {
    std::cout << "Failed to open.\n" ;
}

file << entry << std::endl;

std::cout << "\n\n" ;
char output[10000] ;
file >> output;

std::cout << output << "\n\n" ;

file.close();
return 0;

当我输入“ Hello”时,它将在终端中输出“ \ 210D”,并在txt文件中输出“效汬੯”。 我在网上阅读了有关Unicode的内容,但这一切都令人困惑。

2 个答案:

答案 0 :(得分:3)

您正在打印未初始化内存的内容,因为您实际上并没有在output数组中读取任何内容。

std::fstream具有单个读写位置。当您写入文件时,该读写位置直接位于刚写入的数据之后。当您以后尝试从file读取数据时,您一无所获,因为要读取的位置是 在您写入的数据之后。由于没有什么可读取的,因此没有数据写入output中,最终您将打印未初始化的内存的内容。

要使其正常工作,您需要在写入文件后返回到文件的开头。只需在file.seekg(0);file << entry之间的某个地方调用file >> output

答案 1 :(得分:0)

我使用python和c#,但是当您读取文件时似乎没有指定编码尝试

std::string path = TEXT_FILE_PATH;
std::string utf8Content = readFile(path);
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> utfconv;
std::wstring utf16LeContent = utfconv.from_bytes(utf8Content);

因此,在您的情况下,请将其保存在变量中并进行转换