Unicode - это , а не кодировка, это отображение кодовых точек на символы. Например, кодировка - это UTF8 или UCS2.
И, учитывая, что ноль разница между кодировкой ASCII и UTF8, если вы ограничиваете себя младшими 128 символами, вы на самом деле не можете сказать разницу
Вам лучше спросить, есть ли способ определить разницу между ASCII и конкретной кодировкой Unicode. И ответом на это является использование статистического анализа с присущей ему ошибкой.
Например, если вся строка состоит из байтов, меньших 128, это ASCII (это может быть UTF8, но в этом случае нет никакого способа узнать и нет разницы).
Если это в основном английский / римский язык и состоит из множества двухбайтовых последовательностей с нулем в качестве одного из байтов, это, вероятно, UTF16. И так далее. Я не верю, что есть надежный метод без какого-либо индикатора (например, спецификации).
Я предлагаю не ставить себя в положение, в котором вы должны угадывать. Если сам тип данных не может содержать индикатор, предоставьте различные функции для ASCII и определенную кодировку Unicode. Затем навязывайте работу своему клиенту. В какой-то момент в иерархии вызовов кто-то должен теперь кодировать.
Или, еще лучше, полностью отказаться от ASCII, охватить новый мир и использовать исключительно Юникод. С кодировкой UTF8, ASCII имеет ровно нет преимуществ по сравнению с Unicode: -)