Смотрите здесь для моей предыдущей напыщенной речи на эту тему.
Предполагая, что ваша платформа способна обрабатывать тамильские символы, я предлагаю следующую последовательность событий:
I. Получить входную строку в широкую строку:
#include <clocale>
int main()
{
setlocale(LC_CTYPE, "");
const char * s = getInputString(); // e.g. from the command line
const size_t wl = mbstowcs(NULL, s, 0);
wchar_t * ws = new wchar_t[wl];
mbstowcs(ws, s, wl);
//...
II. Преобразуйте широкую строку в строку с определенной кодировкой:
#include <iconv.h>
// ...
iconv_t cd = iconv_open("UTF32", "WCHAR_T");
size_t iin = wl;
size_t iout = 2 * wl; // random safety margin
uint32_t * us = new uint32_t[iout];
iconv(cd, reinterpret_cast<char*>(ws), &iin, reinterpret_cast<char*>(us), &iout);
iconv_close(cd);
// ...
Наконец, у вас есть us
массив кодовых точек Unicode, которые составили ваш вводимый текст. Теперь вы можете обработать этот массив, например, просматривая каждую кодовую точку в списке и проверяя, происходит ли она из тамильского сценария, и делайте с ней все, что считаете нужным.