Проблема ANSI C UTF-8

Сначала я разработал независимую платформенную библиотеку, используя ANSI C (не C ++ и любые нестандартные библиотеки, такие как MS CRT или glibc, ...).

После нескольких поисков я обнаружил, что одним из лучших способов интернационализации в ANSI C является использование кодировки UTF-8.

В utf-8:

  • strlen (s): всегда подсчитывает количество байтов .
  • mbstowcs (NULL, s, 0): Можно подсчитать количество символов .

Но у меня возникают некоторые проблемы, когда я хочу получить произвольный доступ к элементам (символы) строки utf-8.

В кодировке ASCII:

char get_char(char* assci_str, int n)
{
  // It is very FAST.
  return assci_str[n];
}

В кодировке UTF-16/32:

wchar_t get_char(wchar_t* wstr, int n)
{
  // It is very FAST.
  return wstr[n];
}

И вот моя проблема в кодировке UTF-8:

// What is the return type?
// Because sizeof(utf-8 char) is 8 or 16 or 24 or 32.
/*?*/ get_char(char* utf8str, int n)
{
  // I can found Nth character of string by using for.
  // But it is too slow.
  // What is the best way?
}

Спасибо.

6
задан Amir Saniyan 29 June 2011 в 00:02
поделиться