用C++解析文本文件(其中包含HTML)
Parsing a textfile (with HTML in it) with C++
我已经能够以html网页的形式获取一些原始数据,然后将其放入一个普通的文本文件中。我目前正试图使用C++程序来解析这个文件,但由于某种原因,它给了我奇怪的输出,因为它在每个字母之间都放了@s、符号和^Ms。我不确定这是因为我试图解析HTML文件,还是因为我的代码错误,但我在较小的HTML文件上尝试过我的代码,它运行良好。我想让它工作的文件只有145kB
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
ifstream inFile;
inFile.open(argv[1]);
string str;
while(getline(inFile, str))
{
cout << str << endl;
}
}
如果有人能告诉我为什么这不起作用,我将不胜感激。
HTML文件几乎可以采用任何编码。OP需要根据其编码打开文件,该文件通常由他作为页面服务的一部分从web浏览器获得。请注意,同一网站提供的每个单独页面可能有不同的编码。"@"可能实际上被打印为"^@",如果您给它们空字符,许多输出例程就会打印出这个值。他可能有一个UTF-16文件,并且正在读取它,假设它是ASCII 8位。
他还需要理解"换行符"约定在不同的机器之间是不同的;他的"^M"可能意味着他在Unix机器上运行(Unix机器认为"^J"是换行符,他从Windows盒子里得到了他的文件,Windows盒子认为"^M^J"就是换行符。欢迎来到现实世界。
接下来,OP会发现解析HTML实际上很困难,因为它很复杂,有很多疯狂的字符约定(除了编码之外),而且通常只是非法的,因为浏览器允许这样做,而不是每次都检查HTML是否干净。
试试这是否适用。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
wifstream inFile;
inFile.open(argv[1]);
wstring str;
while(getline(inFile, str))
{
wcout << str << endl;
}
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 检查/确定QString是否包含html
- 用C++解析文本文件(其中包含HTML)
- 如何将包含空格的字符串设置为HTML文本字段(在表单中)的默认值
- 如何使用BoostptreeC++解析值中包含HTML标记的XML