Получаю ошибку при чтении нестандартных символов

Написал небольшую программу для подсчета разных слов в текстах, например, в песнях. Иногда все работает правильно, а иногда, как я понял, происходит ошибка чтения нестандартных символов (например ’ вместо ').

using namespace std;

string removePunctuations(string& s) {
    string result = "";
    for (char c : s) {
        if (!ispunct(c) || c == '\'' || c == '-') {
            result += tolower(c);
        }
    }
    s = result;
    return s;
}

int main()
{
    ifstream isong("songtext.txt");
    ofstream osong("songstats.txt");

    map<string, int> used_words;
    string word;

    while (isong >> word)
        used_words[removePunctuations(word)]++;

    isong.close();
    vector<pair<string, int>> rarity;

    osong << "List of words:" << endl;
    for (auto elem : used_words) {
        osong << '"' << elem.first << "\": " << elem.second << endl;
        rarity.push_back(elem);
    }
    sort(rarity.begin(), rarity.end(),
        [](const pair<string, int>& a,
            const pair<string, int>& b) {
                return a.second < b.second; 
        });

    osong << endl << "List of rarity:" << endl;
    for (auto elem : rarity) 
        osong << '"' << elem.first << "\": " << elem.second << endl;
    
    osong.close();
    return 0;
}

Ответы (0 шт):