Символы за пределами 7-битного диапазона ASCII также полезны на английском языке. Кто-нибудь, использующий ваше программное обеспечение, должен даже написать знак €? Или £? Как насчет отличить «резюме» от «резюме»? Вы говорите, что оно используется учеными всего мира, у которых могут быть такие имена, как «Йорг» или «Гудмундсдоттир». В научной среде полезно говорить о длинах волн, таких как λ, единицах, таких как Å, или углах, как Θ, даже на английском языке.
Некоторые из этих символов, такие как «ö», «£» и «€», могут быть доступны в 8-битных кодировках, таких как ISO-8859-1 или Windows-1252, поэтому может показаться, что вы можете просто использовать эти кодировки и покончим с этим. Проблема в том, что за пределами этих диапазонов есть символы, которые многие люди используют очень часто, и поэтому множество существующих данных кодируется в UTF-8. Если ваше программное обеспечение не понимает этого при импорте данных, оно может интерпретировать символ «£» в UTF-8 как последовательность из 2 символов Windows-1252 и отображать его как «Â». Если такого рода ошибки не обнаруживаются достаточно долго, вы можете начать серьезно искажать ваши данные, так как многократные неверные интерпретации все больше и больше изменяют ваши данные, пока они не станут невосстановимыми.
И хорошо подумать об этих проблемах на ранних этапах разработки вашей программы. Поскольку строки, как правило, представляют собой концепцию очень низкого уровня, которая пронизывает всю вашу программу, с большим количеством предположений о том, как они работают, неявно в том, как они используются, добавить поддержку Unicode в программу позже может быть очень сложно и дорого, если вы даже никогда не задумывались над этим вопросом.
Я рекомендую всегда использовать строковые типы и библиотеки с поддержкой Unicode везде, где это возможно, и убедиться, что любые ваши тесты (будь то единичные, интеграционные, регрессионные или любые другие), которые имеют дело со строками, пытаются передать какой-нибудь Unicode через вашу систему, чтобы убедиться, что они работают и проходят невредимыми.
Если вы не обрабатываете Unicode, то я бы порекомендовал убедиться, что все данные, принятые системой, являются 7-битными чистыми (то есть, за пределами 7-битного диапазона US-ASCII нет символов). Это поможет избежать проблем с несовместимостью между 8-битными устаревшими кодировками, такими как семейство ISO-8859 и UTF-8.