Потребовалось для поддержки одного крайне старого проекта, где нельзя разом перейти на UTF-8 преобразовать кодировку из UTF-8 в CP-866


/**
* @brief Переводим из UTF-8 в CP866
* @param dst - по какому адресу пишем
* @param src - откуда берём строку, до первого '\0'
* @return длина dst
*/
uint32_t UTF8_CP866(char *dst, const char *src)
{
  uint32_t i =0, j =0;
  uint8_t cur, conv;
  //-- Пробегаемся по всем символам, учитываем отличия между таблицами
  for (i=0; src[i]!=0; ++i) {
    cur = src[i];
    if ( cur==208 || cur==209 ) {
      conv = src[++i];
      if ( cur==208 ) {
        if ( conv>=144 && conv<192 ) { conv -= 16; }
      } else {
        if ( conv>=128 && conv<144 ) { conv += 96; }
      }
      dst[j++] = conv;
    } else {
      dst[j++] = cur;
    }
  }
  dst[j] = 0;
  return j;
}

Leave a Comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

You may also like