「ウムラウト」 (文字 ä、ü、ö、...) と C++ の ifstream に問題があります。
curl を使用して html ページをダウンロードし、ifstream を使用してダウンロードしたファイルを 1 行ずつ読み取り、そこからデータを解析します。これは、次のいずれかのような行になるまでうまくいきます。
te="Olimpija Laibach - Tromsö";
te="Burghausen - Münster";
私のコードはこれらの行を解析し、次のように出力します。
Olimpija Laibach vs. Troms?
Burghausen vs. M?nster
コードから直接ウムラウトを出力するようなことは次のように機能します。
cout << "öäü" << endl; // This works fine
私のコードは次のようになります。
ifstream fin("file");
while(!(fin.eof())) {
getline(fin, line, '\n');
int pos = line.find("te=");
if(pos >= 0) {
pos = line.find(" - ");
string team1 = line.substr(4,pos-4);
string team2 = line.substr(pos+3, line.length()-pos-6);
cout << team1 << " vs. " << team2 << endl;
}
}
編集:奇妙なことに、同じコード (唯一の変更点はソースと区切り記号) が別のテキスト入力ファイルに対して機能することです (同じ手順: curl でダウンロードし、ifstream で読み取ります)。次のような行を解析して出力することは問題ありません。
<span id="...">Fernwärme Vienna</span>