繁体   English   中英

c ++:如何将任何文件读入std :: string

[英]c++: How to read any file into std::string

我有一堆txt文件,想要将它们读入std :: string,其中一些是UCS-2,UTF-8编码。 如何将它们读入std :: string。 我只想将任何文本文件读入std :: string。 我必须转换它们吗?

如何阅读它们取决于您的操作系统支持的内容以及您正在使用的语言环境。

如果您只是天真地读取文件而不触及您的语言环境,并且它们的语言环境与您的std c ++库正在使用的语言环境不匹配,则可能会遇到困难。 单个与多字节字符集的类似问题。

在阅读之前没有可靠的方法来判断文件的区域设置(元数据可能是错误的),因此一般策略是首先尝试以最常见的格式读取,然后使用不同的格式重新尝试如果失败(即遇到无效字符)。 即使这样,它也可能含糊不清。 这是一个非常复杂的问题,您遇到了使用疯狂字符集解析HTML的相同问题。

通常,有两组文件I / O函数可用,一组用于多字节字符集,另一组用于单字节字符集。 但是,对此功能的支持是深度特定于平台的,因此如果您使用的英语本地化操作系统没有添加特殊字符支持,那么在不使用外部库的情况下,C ++可能不会直接支持多字节集。

Microsoft指定cin和cout的非标准扩展。 通过为它们添加aw前缀,它们按流的字节宽度分隔流。

wcout << "儫";

这可以按照您的预期工作,但您必须#define _UNICODE才能进行编译。 作为旁注,Windows将其许多系统API调用分为两个版本,一个采用单字节字符串,另一个采用多字节字符串。 CreateProcessACreateProcessW

总而言之,IO功能按字符集的字节宽度和区域设置进行拆分。 为了更准确地回答您的问题,我需要了解您的目标。 看看C ++的语言环境支持,以便更好地了解这一点。 具体来说,语言环境在ios_baseimbuegetloc 目前没有一种很好的方法可以使用广泛部署的C ++版本来处理这些问题,但我知道这些问题在即将推出的C ++版本中已得到缓解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM