Почему не все, что мы делаем в Юникоде? - PullRequest
49 голосов
/ 11 июня 2009

Учитывая, что Unicode существует уже 18 лет , почему все еще существуют приложения, которые не поддерживают Unicode? Даже мой опыт работы с некоторыми операционными системами и Unicode был болезненным, если не сказать больше. Как отметил Джоэл Спольски в 2003 году, это не так сложно. Так в чем же дело? Почему мы не можем собрать это вместе?

Ответы [ 17 ]

2 голосов
/ 13 ноября 2010

Из-за инерции, вызванной C ++. Он имел (имеет) ужасную поддержку юникода и оттащил разработчиков.

2 голосов
/ 11 сентября 2009

Я бы сказал, что в основном есть две причины. Во-первых, просто поддержка Unicode ваших инструментов просто не работает. C ++ до сих пор не поддерживает Unicode и не получит ее до следующей версии стандарта, которая может занять год или два, чтобы закончиться, а затем еще пять или десять лет, чтобы широко использоваться. Многие другие языки не намного лучше, и даже если у вас наконец-то появилась поддержка Unicode, использовать все же более простые, чем простые ASCII-строки, может быть все же более громоздким.

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

ASCII можно понять, просто взглянув на таблицу ASCII без какой-либо дополнительной документации, с Юникодом, которого больше нет.

0 голосов
/ 11 июня 2009

Я подозреваю, что это потому, что программное обеспечение имеет такие сильные корни на западе. UTF-8 - хороший, компактный формат, если вы живете в Америке. Но это не так жарко, если вы живете в Азии. ;)

0 голосов
/ 11 июня 2009

Мне лично не нравится, как некоторые форматы Юникода ломают его, так что вы больше не можете делать строку [3], чтобы получить 3-й символ. Конечно, это можно абстрагировать, но представьте, насколько медленнее будет большой проект со строками, например, GCC, если ему придется пересечь строку, чтобы вычислить n-й символ. Единственный вариант - это кэширование, где «полезные» позиции находятся и даже тогда они медленны, а в некоторых форматах теперь вы берете хорошие 5 байтов на символ. Для меня это просто смешно.

0 голосов
/ 11 июня 2009

Больше накладных расходов, места.

0 голосов
/ 11 июня 2009

Юникод требует больше работы (мышления), вам обычно платят только за то, что требуется, поэтому вы выбираете самый быстрый и менее сложный вариант.

Ну, это с моей точки зрения. Я предполагаю, что если вы ожидаете, что код будет использовать std::wstring hw(L"hello world"), вы должны объяснить, как все это работает, чтобы напечатать wstring, вам нужно wcout: std::wcout << hw << std::endl; (я думаю), (но endl кажется нормальным ...) ... мне кажется, это больше работы - конечно, если бы я писал международное приложение, мне пришлось бы инвестировать в его выяснение, но до тех пор я этого не делаю (как я подозреваю, большинство разработчиков).

Полагаю, это возвращается к деньгам, время - деньги.

0 голосов
/ 11 июня 2009

Все просто. Поскольку на наших клавиатурах есть только символы ASCII, с какой стати мы сталкиваемся или заботимся о других символах? Это не столько отношение, сколько то, что происходит, когда программисту никогда не приходилось думать об этой проблеме или никогда не сталкивался с ней, возможно, даже не знает, что такое юникод.

edit: Другими словами, Unicode - это то, о чем вы должны думать, а мышление - это не то, чем интересуется большинство людей, даже программисты.

...