Я бы сказал, что в основном есть две причины. Во-первых, просто поддержка Unicode ваших инструментов просто не работает. C ++ до сих пор не поддерживает Unicode и не получит ее до следующей версии стандарта, которая может занять год или два, чтобы закончиться, а затем еще пять или десять лет, чтобы широко использоваться. Многие другие языки не намного лучше, и даже если у вас наконец-то появилась поддержка Unicode, использовать все же более простые, чем простые ASCII-строки, может быть все же более громоздким.
Вторая причина отчасти в том, что она вызывает первую проблему: Unicode сложен, это не ракетостроение, но он дает вам массу проблем, с которыми вам никогда не приходилось сталкиваться в ASCII. С ASCII у вас были четкие отношения one byte == one glyph
, вы могли обращаться к N-му символу строки простым str[N]
, могли просто хранить все символы всего набора в памяти и так далее. С Unicode вы больше не можете этого делать, вам приходится иметь дело с различными способами кодирования Unicode (UTF-8, UTF-16, ...), метками порядка байтов, ошибками декодирования, множеством шрифтов, которые имеют только подмножество символов что вам нужно для полной поддержки Unicode, больше символов, чем вы хотите сохранить в памяти в определенный момент времени и так далее.
ASCII можно понять, просто взглянув на таблицу ASCII без какой-либо дополнительной документации, с Юникодом, которого больше нет.