Это действительно хороший вопрос. Единственная причина, по которой я могу думать об этом, не имеет ничего общего с I18n или неанглийским текстом - это то, что Unicode особенно подходит для того, что можно назвать набором символов-концентраторов. Если вы думаете о своей системе как о концентраторе с его внешними зависимостями в качестве лучей, вы хотите изолировать преобразования кодировки символов в лучи, чтобы ваша система-концентратор работала в соответствии с выбранной вами кодировкой. Что делает Unicode идеальным набором символов для центра вашей системы, так это то, что он признает существование других наборов символов, определяет эквивалентности между своими собственными символами и символами в этих внешних наборах символов, и существует непрерывный процесс, в котором он расширяет себя, чтобы сохранить с инновациями и развитием внешних наборов символов. Существуют все виды странных кодировок: даже когда документация убеждает вас, что внешняя система или библиотека использует простой ASCII, часто оказывается какой-то вариант, такой как IBM775 или HPRoman8, и хорошая вещь в Unicode заключается в том, что независимо от того, что Вам нужно кодировать, есть большая вероятность, что на unicode.org есть таблица, которая точно определяет, как преобразовать эти данные в Unicode и вернуться обратно без потери информации. С другой стороны, эквиваленты a-z довольно четко определены в каждом наборе символов, поэтому, если ваши данные действительно ограничены стандартным английским алфавитом, ASCII может работать так же хорошо, как набор символов хаба.
Решение о кодировании - это решение по двум причинам: какой набор символов разрешен и как эти символы представлены. Юникод позволяет вам использовать практически любого когда-либо придуманного персонажа, но у вас могут быть свои собственные причины не хотеть или нуждаться в таком широком выборе. Вы можете по-прежнему ограничивать имена пользователей, например, комбинациями az и underscore, возможно, потому что вы должны поместить их во внешнюю систему LDAP, чей собственный набор символов ограничен, возможно, потому что вам нужно распечатать их, используя шрифт, который не охватывает весь Unicode, может быть потому, что он закрывает проблемы безопасности, открываемые похожими персонажами. Если вы используете что-то вроде ASCII или ISO8859-1, уровень хранения / передачи реализует множество этих ограничений; с Unicode уровень хранения ничего не ограничивает, поэтому вам, возможно, придется реализовать свои собственные правила на уровне приложения. Это больше работы - больше программирования, больше тестирования, больше возможных состояний системы. Компромисс для этой дополнительной работы - большая гибкость, правила на уровне приложений легче изменить, чем системные кодировки.