Daniro_San
@Daniro_San
Программист

Как сделать свою функцию для перевода из UTF8 в ANSI?

Всегда создавал сорсы в win1251, и пользовалсяsetlocale(LC_ALL, ".866") и wcout` ом, для вывода кириллицы. Потом решил, что это некошерно, и стал создавать сорсы в utf8. Все было хорошо, до тех пор пока я опять не столкнулся с выводом кириллицы.

Старый вариант с setlocale уже не работал и я решил написать свою функцию для конвертации кириллических символов в читаемый на консоли вид.
void SetRusChar(char &symbol)
{
    if(!symbol)
    {
        return;
    }
    /// "Разрыв" кириллицы в таблице символов ANSI
    const int min=-128;
    const int max=-96;
    if(symbol>min&&symbol<max)
    {
        const int addOffset=-112;
        symbol-=addOffset;
    }
    const int offset=16;
    symbol-=offset;
}
std::string GetRusString(std::string line)
{
    const char bigWaste=-48;
    const char littleWaste=-47;
    for(std::string::iterator i=line.begin(); i<line.end(); ++i)
    {
        if(*i==bigWaste||*i==littleWaste)
        {
            line.erase(i);
        }
        SetRusChar(*i);
    }
    return line;
}

Получилось очень убого - некоторые символы она пропускает.
Потом я понял, что без вникания в кодировки ANSI и UTF8 и их устройство здесь не обойтись.
Как сделать нормальную функцию для перевода из UTF8 в ANSI? Можно обьяснить поподробнее? Есть ли уже готовые ф-ции? В winApi например?
  • Вопрос задан
  • 413 просмотров
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы