首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fstream用中文/日文编写的文本,但没有正确读取文件

使用fstream用中文/日文编写的文本,但没有正确读取文件
EN

Stack Overflow用户
提问于 2019-06-10 02:04:34
回答 2查看 453关注 0票数 2

我试图使用cin将用户文本(以普通文本)输入到使用fstream的txt文件中。但这段文字以汉字的形式出现,当再读一遍时,它会向我显示字母中的随机字母。

代码语言:javascript
复制
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的文章,但这一切都很让人困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-10 02:52:46

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

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

要使它正常工作,您需要在写入文件后找到文件的开头。只需在file.seekg(0);file >> output之间调用file >> output即可。

票数 3
EN

Stack Overflow用户

发布于 2019-06-10 02:26:51

我做python和c#,但是在读取文件时,似乎没有指定编码尝试。

代码语言:javascript
复制
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);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56519748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档