Ответ 1
Вам не обязательно, чтобы UTF-8 столкнулся с проблемой. Локаль отвечает за настройку классов символов, то есть для определения того, какой символ представляет собой пробел, букву или цифру. Рассмотрим эти два примера:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep '[[:alnum:]]' || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep '[[:alnum:]]' || echo false
false
При попытке сопоставить точные бинарные шаблоны друг с другом, языковой стандарт не имеет значения:
$ echo -e '\xe4' | LC_ALL=en_US.iso88591 grep "$(echo -e '\xe4')" || echo false
ä
$ echo -e '\xe4' | LC_ALL=C grep "$(echo -e '\xe4')" || echo false
ä
Я не уверен в степени grep, реализующего unicode, и о том, насколько хорошо разные кодовые точки сопоставляются друг с другом, но сопоставление любого подмножества ASCII и соответствия отдельных символов без альтернативных двоичных представлений должно работать нормально, независимо от языка.