О сколько нам открытий чудных готовит Office Microsoft



    По сообщениям в комментариях к статье про блокнот, во всех версиях Microsoft Excel, начиная по крайней мере с '97 и до самых новых, в имени листа не всегда можно ввести большую букву Ж. Данная проблема обсуждается в сети уже давно, например на этом форуме забавно наблюдать, как некоторые утверждают, что у них проблемы нет, а у других есть, но не всегда, и никто не понимает, почему так. На первый взгляд можно подумать, что это просто недоработка программистов: они хотели не дать пользователю ввести символ ':', и просто не подумали о том, что Ж находится на той же кнопке.

    На деле оказалось всё гораздо хуже. Описать нормальными словами то, что происходит в excel, когда вы просто нажимаете кнопку 'Ж', практически невозможно. Поэтому я попытаюсь обрисовать в целом процесс исследования, сократив его где возможно, и не слишком перегружая статью ассемблерным кодом. В итоге мы узнаем, почему получается так, что не любые символы можно ввести, и как это можно исправить.

    С чего начать? Поэкспериментируем немного. Оказывается, что иногда ввести Ж в название листа всё-таки можно, причём если уж один раз это сработало, то её можно будет вводить сколько угодно и где угодно, пока не закроешь Excel. А если не получилось, то как ни старайся, ввести эту букву уже не получится никак. Выяснить, почему так происходит, пока не удаётся. Известно одно: скопипастить её можно всегда.



    Ну хорошо. Раз ошибка имеется где-то в коде проверки символов, попробуем найти её через действительно запрещённый символ ':'. Копипастим его в название листа, нажимаем Enter, и получаем сообщение, что такие символы не допускаются. Прервём на этом месте выполнение программы. Мы попадаем куда-то в дебри системных вызовов, во главе с user32.dll, общая вложенность 22 в глубину стека. Начинаем искать, как мы сюда попали. Поднявшись примерно на 15 уровней вверх, обнаруживаем следующий код:



    Очевидно, здесь в уже набранной строке проверяется наличие всех запрещённых в имени листа символов. Конечно, как мы уже знаем, до этого места буква 'Ж' не доходит, она срубается ещё при нажатии самой клавиши, но можно предположить, что там анализ происходит аналогично. Поищем подобный код в программе. Похожих мест оказывается несколько, и одно из них как раз срабатывает при нажатии клавиши, когда мы находимся в редактировании имени листа:



    Пока всё идёт неплохо. При нажатии проверяются те же самые символы. Код немного отличается, ну уж так видно сработал компилятор. Пора выяснить, почему же не вводится буква 'Ж'. Нажимаем её, и тут нас ждёт сюрприз: точка останова не срабатывает! Как же так? Опять приходится возвращаться выше по стеку вызовов. В эту подпрограмму мы попадаем отсюда:



    To есть вызывается подпрограмма по адресу, который содержится в регистре rdi плюс 8. Вот только оказывается, что при нажатии большинства клавиш там будет адрес той самой «правильной» подпрограммы, которую мы видели выше. А если мы нажимаем Ж с шифтом (чтобы она была большая), в этом месте оказывается совсем другая подпрограмма. Вот она:



    Это подпрограмма типа «давай, до свидания!» То есть она сразу завершается с кодом 1, ничего не анализируется, и нажатая клавиша никуда не сохраняется.

    Мы обнаружили классический вызов по таблице. rdi — индексный регистр, его содержимое указывает на таблицу адресов, и в зависимости от его содержимого, вызывается та или иная подпрограмма. Вот эта таблица:



    Анализируя код, который с ней работает, удалось выяснить следующее: в начале таблицы — число строк (0Eh = 14), правда почему-то 2 раза. Каждая строка — описание комбинации клавиш. Сначала диапазон скан-кодов (выделен зеленым), затем допустимые состояния shift, alt и Ctrl (биты 4,8,20 — синим), маска для них (красным), и в конце 64-битный адрес подпрограммы (желтым), которая выполняется при совпадении условий. Большая Ж в этой таблице находится в 6-й строчке.



    Скан-код 0BAh (VK_OEM_1), при нажатом шифте (4) приводит к вызову 000000013FB0A454 = «до свидания». Если же ни одна из комбинаций не проходит, то в последней строчке срабатывает код от 0 до FF, и вызывается п/п 000000014039530С, часть которой мы видели выше, где всё идёт по обычному плану, и символ попадает в имя листа.

    Ну вот. Казалось бы, всё понятно. Программисты не учли раскладку, просто отсекли некоторые скан-коды и в результате ошибка. Теперь осталось только выяснить, как таблица заполняется. Нигде в файлах офиса её нет, значит она генерируется на этапе исполнения. Снова повторяется муторное скитание по многовложенным кодам, которое я пропущу. В этом процессе конечно excel пришлось много раз перезапускать.

    И вот, в очередной раз остановившись где-то в недрах mso.dll, я с удивлением вижу, что в этой таблице какие-то совсем другие числа! Так я наконец узнал страшную тайну microsoft excel.



    Как видим, здесь теперь не 14, а 13 строк, и в середине другие скан-коды (выделены зеленым). А именно, в шестой строке, там где раньше была буква Ж, теперь shift-6. То есть то же самое двоеточие, только из русской раскладки. То же самое и с остальными клавишами. Вот теперь действительно стало всё понятно. Довольно быстро выяснилось, что таких таблиц тут не одна, а целых 43 штуки (для каждой области экрана, отдельно для основного поля, поля ввода формул и т.д.). И все они заполняются один раз, при первом нажатии клавиши, а заполнение зависит от выбранной именно в этот момент раскладки и больше никогда не меняется.

    То есть если после запуска excel при первом нажатии любой клавиши, пусть даже стрелки вниз, выбрана английская раскладка, буквы 'Ж' вы больше не увидите. И наоборот, если раскладка была русская, больших 'Ж' будет сколько угодно, а запрещённым «назначается» shift-б, и, кстати, shift-7 тоже. И после этого назвать лист, скажем, «рога & копыта» уже не получится, хотя символ '&' вроде как разрешён.

    Ещё раз напомню, что всё вышесказанное относится к вводу текста в названии листа, а для остальных областей экрана excel таблицы другие, некоторые по 40 и более строк. О том, что там может происходить при нажатии клавиш, лучше не думать.

    Тем не менее, исправить эту ошибку можно, и даже проще, чем ожидалось. Оказалось, что исходным материалом для заполнения всех этих таблиц служит текстовая (!) таблица комбинаций клавиш, расположенная в файле XLINTL32.DLL, лежащего в одной из папок офиса. Его часть как раз изображена на КДПВ.

    Вот так выглядит фрагмент, касающийся названия листа:

    ~Sh+~Alt+~Ctrl+Return~Sh+~Alt+~Ctrl+Execute~Sh+~Alt+~Ctrl+Escape~Sh+~Alt+~Ctrl+Cancel
    ~Sh+~Alt+~Ctrl+Tab:*?Ctrl+;Ctrl+:Ctrl+'Ctrl+"F2Default

    Что же делает excel? Он разбирает части этой строки и делает из неё ту самую таблицу, подбирая такие скан-коды, которые приводили бы к вводу нужных символов, с учётом раскладки. Представляете? Он анализирует текстовое представление, чтобы сделать из него таблицу скан-кодов, чтобы потом, при нажатии клавиш, сравнивать полученный код с каждой строкой и вызывать соответствующую процедуру. Заполнять все 43 таблицы при каждом нажатии естественно не годится. Поэтому это делается один раз. Так что программисты не забыли про раскладки, а провели с ними огромную работу. Только одно они не учли — во время работы excel их можно переключать.

    Кстати, теперь ясно, почему в русском варианте не 14 строк, а 13. Одна из запрещённых комбинаций Ctrl+' невозможна в русской раскладке, потому что апострофа в ней в принципе нет, поэтому и скан-кода для него не находится.

    Вернёмся однако к ошибке. В середине текста видны подряд те самые 3 символа :*? для запрещения. Чтобы всё исправить, достаточно в файле XLINTL32.DLL заменить эти 3 символа :*? на 3 звёздочки, потому что звёздочка на обоих раскладках в одном месте. Это можно сделать с помощью любого двоичного редактора или даже FAR, т.к. он позволяет менять текстовую часть двоичного файла по F4, при этом не испортив его.

    После этого excel перестанет отбрасывать нужные скан-коды, и можно будет при любой раскладке вводить большую Ж, '&', '^' и запятую, при этом действительно запрещённые ':' и '?' всё равно не пройдут 2 проверки, которые описаны в начале статьи. Короче всё будет хорошо. И в следующий раз, когда будете набирать какой-нибудь текст в ворде или другом приложении офиса, постарайтесь не думать о том, что там происходит внутри.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 89
    • +28
      Я подспудно всегда чувствовал, что если вопросами искусственного интеллекта займется Microsoft, восстания машин нам не избежать. Не по злому умыслу, а…
      • +21
        И оно провалится при команде: «1. Убить все[ вы; ивши[» :)
        • 0
          А что за прикол с "[ вы; ивши["?
          • 0
            «Убить всех выживших» — на традиционной 101-кнопочной клавиатуре символы "[" и «х» находятся на одной клавише. Аналогично ";" и «ж». Такое может вылезти при фильтрации по коду кнопки, а не по символу.
            • 0
              Спасибо, а то подумал может ещё какая пасхалка офиса :)
        • +7
          Когда винда накенец-то увидит и распознает мой сетевой принто-сканер, тогда я начну за это опасаться.
          Я буду держать всех в курсе и скажу если «началось».
          • 0
            Да пусть хотя бы локальный Olivetti PR2E увидит…
          • +1
            Да ладно… Если у них получится искуственный интеллект, то он пройдёт первую же проверку — не будет работать.
            Что он, дурной?
          • +2
            MSO то ладно, а вот представьте сколько таких багов во подсистемах безопасности и шифрования.

            Интересно зачем некорректный символ проверяется 3 раза? И ну и по сканкоду, это сильно конечно.
            • +14
              Интересно зачем некорректный символ проверяется 3 раза?

              Разные индусы эти куски кода писали, у каждого было тз такие символы не пропсукать, а вмержились они все одновременно, как вариант,
              • +2
                MSO то ладно, а вот представьте сколько таких багов во подсистемах безопасности и шифрования.

                Это же совсем разные команды. Прикладники — сами по себе, «ядерщики» — сами и т.д.
                • 0
                  let char = 'Ж'

                  // если не присвоилось, то
                  if !char {

                  }
                • +11
                  И эти люди запрещают мне ковыряться в носу учать меня как нужно писать программы :)
                  • +56
                    Когда смотришь вопросы на собеседовании — не иначе гениев набирают.
                    Когда смотришь на код — и куда они всех этих гениев дели…
                    • +4
                      Ну как куда? В отборщиков гениев — в менеджеры.
                      • 0
                        У меня есть небезосновательная гипотеза, что лид продукта в то время, когда писался этот код, спустя некоторое время основал FogCreek и StackOverflow. И вообще, кажется, мужик довольно неглупый.
                        • 0
                          а как связана разработка VBA с разработкой всего экселя? Или VBA — отдельный продукт, а эксель — отдельный?
                          • 0
                            А как связан ваш вопрос с моим комментарием?
                            • 0
                              наверное, тем, что Джоел Спольски отвечал всё-таки за VBA?
                              • 0
                                Да вроде нет.

                                > I left the company in 1994, assuming Bill had completely forgotten me, until I noticed a short interview with Bill Gates in the Wall Street Journal, in which he mentioned, almost in passing, something along the lines of how hard it was to recruit, say, ★a good program manager for Excel★. They don't just grow on trees, or something.
                                — www.joelonsoftware.com/items/2006/06/16.html
                                • 0
                                  1. как соотносится «лид продукта» и program manager? Сколько менеджеров работают над одним продуктом и как из них называется ответственный за продукт в целом? Который «лид продукта»?

                                  2. в этой же статье отчётливо написано, что будучи «program manager» он разрабатывал подсистему VBA для экселя. VBA < Excel < Microsoft Office < Microsoft, при этом код, отвечающий за букву Ж во страницах экселя никоим образом с Джоэлом не связан.
                      • +10
                        Одни примеры с MSDN чего стоят. Ни RAII, ни exception-safety нет, а сколько коду с этих примеров скопировано в продакшн…
                        • +14
                          … внутри самого MicroSoft.
                      • +12
                        Читая статьи о реверс-инжиниринге Майкрософтских программ иногда кажется, что не видя исходный код такое раскопать невозможно...(а это говорит о мастерстве автора :) ).

                        Или может намного проще понять в чем проблема НЕ имея исходный код, чем бегать по сотням классов/функций в IDE и читать код?
                        • +10
                          Некоторый код проще понять в ассемблере, серьезно.
                          • +1
                            Особенно если компилятор проделал огромную работу по оптимизации «индусского» кода.
                          • 0
                            Какой-нибудь крэш одинаково легко. А такую работу, как проделал автор, конечно проще было бы проделать через IDE с сорцами. Он вообще большой умница!
                          • 0
                            В 2016-м превью вроде бы проблемы нет. Вводиться в любой раскладке. Есть подозрения что могли пофиксить с переходом xslx.
                            • +4
                              Ха, а в постановке с форума действительно не работает:
                              Эта старинная хохма достигается следующим макаром:
                              — в ENG-раскладке попытаться ввести двоеточие (:)
                              — сказать «ой» (ибо не получится)
                              — переключиться в RUS-раскладку
                              — попытаться ввести «Ж»
                              — опять — «ой»
                              • +8
                                Читайте внимательно статью. Всё дело в том, какая раскладка у вас будет выбрана в момент первого нажатия на клавишу.
                                • +1
                                  Да, признаю, так не работает.
                                  • +27
                                    В общем, спасибо за информацию, что в 2016-м баг по-прежнему есть ;)
                                    • +10
                                      Ловите человека из будущего!
                                    • +3
                                      Спортивный дайджест с собой взял? :)
                              • 0
                                После таких статей начинаешь понимать, почему Микрософт не любит open source. Иной исходник может неслабо так подмочить репутацию.
                                • +13
                                  Я просто оставлю это здесь
                                  github.com/dotnet
                                  github.com/aspnet
                                  github.com/Microsoft
                                  Первое, что по памяти нашел.
                                  • +3
                                    Каждый опенсорсник считает нужным пнуть мс за легаси код, этого не исправить
                                    • –3
                                      1) Исправить
                                      2) Не пускать в продакшен такой код. Не пофиксить баг и просто забить, я ума не приложу, как такое можно сделать. Хотя справидливости ради хочеться отметить, что не плохо бы знать частоту появления этого бага. В этой статье эти данный представлены расплывчато.
                                      • +1
                                        1) Исправить-то можно, а нужно ли? Когда софт работает идеально — нет повода «пинать».
                                        2) Ошибка не критическая, скорее просто неприятная. К тому же на продажи исправление такого бага не влияет совершенно никак — а соответственно нет повода вкладывать в это дело ни цента. Microsoft может себе позволить не исправлять ошибку, встречающуюся «раз на миллион».
                                        • +1
                                          Вы когда пишете код/делаете концепт предусматриваете rtl-языки?
                                          По опыту работы американцы где-то также относятся к другим локалям, европейцы -к другим таймзонам: вроде понятно, что оно существует и даже будет где-то использоваться, но внимания к этому по остаточному принципу.
                                          Вспомните баг в Netscape Navigator — стоило в javascript использовать букву «я», как браузер сходил с ума. Ну а что? Удобно же 255-й код использовать для своих нужд, он всё равно «где-то в неиспользуемой части» ascii-таблицы.
                                          • +2
                                            Среднему американскому программисту вообще не приходит в голову, что у клавиатуры может переключаться раскладка. Как раз этим, например, можно объяснить решение Эпла включить всем по умолчанию отдельную раскладку для смайликов. Для американца этот интерфейс прост и понятен: нажали кнопку, включился режим смайликов, нажали ещё раз, он выключился. А про народы, вынужденные писать в двух раскладках, никто и не подумал.
                                            • +2
                                              Вам и M$ передают привет страны с тремя раскладками, а также отдельные их жители с четырьмя.
                                              • 0
                                                Вы меня опередили про 3 раскладки
                                            • +5
                                              По опыту работы американцы где-то также относятся к другим локалям

                                              Где-то видел, на одном англоязычном форуме, перевод в UTF-8 путем приписывания 0x00 спереди, мол и так работает же.
                                            • 0
                                              Вы когда пишете код/делаете концепт предусматриваете rtl-языки?

                                              Вы даже не представляете, на какую больную мозоль наступили…
                                    • +3
                                      А у майкрософта есть какой-нибудь багтрекер или нечто подобное?
                                      Автору спасибо, люблю такие детективы. Главное доступно и интересно написано.
                                      • 0
                                        Есть suggestion box, excel.uservoice.com

                                        Багтрекер, о котором почему-то никто не знает, хотя он вполне публичный, много лет был на MS connect, но его сейчас постепенно прикрывают.
                                        • +6
                                          А знаете почему?
                                          • +13
                                            Почему?
                                            • 0
                                              Вероятно потому, что ваше мнение и ваши усилия в направлении улучшения продукта больше не нужны.
                                              • 0
                                                Это неверно.
                                                Запросы на форумах TechNet от специалистов, а не конечных пользователей (у меня тут зависло, почините) обрабатываются пасущимися там MSFT.
                                                У меня смешанный опыт: иногда получалось достучаться, иногда нет.
                                                • 0
                                                  Есть ли у вас примеры, что в форуме получен ответ или решение, недоступное простому обывателю, внимательно читающему библиотеку Technet?
                                                  • +1
                                                    Да. Я дважды получал помощь: один раз оказалось, что в SDK не включены кое-какие .h файлы, я указал на это, они извинились за ошибку и включили их в следующий выпуск.
                                                    В другой раз мне нужно было решить одну хитрую задачу с WinJobs, мне подсказали нестандартный трюк. Насколько я помню, это были как раз MSFT участники.
                                                    А вот ответа по поводу OLE интерфейсов в RichEdit компоненте ответа получить не смог нигде. Ни через багтрекер, ни через форумы технет, ни через твиттер их техподдержки.
                                                    • 0
                                                      Дайте ссылки, интересно. Все ваши сообщения есть в вашем профиле, activity.
                                      • +11
                                        Тем не менее, исправить эту ошибку можно, и даже проще, чем ожидалось.

                                        Кстати, позавчера LibreOffice 5 вышел… На всякий случай, вдруг кому :)
                                        • 0
                                          Это похоже на ошибку Автокада версии до 2009 вроде. Там нельзя было использовать в названии слоя букву Б. К сожалению, не помню, можно ли было сделать копировать-вставить. Причем у них в багах это висело лет 7-8, пока исправили (это важно, так как каждые 3 года они меняют формат файла и в целом вносят много изменений в код, а тут 3 поколения не исправляли).
                                          • +6
                                            MS видимо не понимают, что название состоит из символов, а не нажатых клавиш. Надо проверять само название на валидность, а оно может быть сформировано как с клавиатуры, как еще кучей разных способов, включая ситуацию, когда кто-то залезет в исходник документа и там поменяет символ в обход excel.

                                            Представляете сколько избыточного и тупого кода в других частях системы? Например, проверка клавиш при сохранении файла. И эта проверка может быть своя в каждом продукте. Понятно куда деваются гигабайты на системе виндовс
                                            • +1
                                              Надо проверять само название на валидность

                                              Тоже спорный вопрос. Зачем ставить ограничение на название? Ладно в ФС, и то там минимум ограничений, слеш и какое-нибудь двоеточие, остальное от лукавого, но внутри документа???
                                              • –1
                                                Вы когда-нибудь работали с Excel или вообще никогда? Название листа там вполне может фигурировать как часть формулы! Если всякие двоеточия будут допустимы в имени — как это всё будет работать, по вашему?
                                                • +3
                                                  Вы когда-нибудь работали с Excel или вообще никогда?

                                                  По минимуму.
                                                  Название листа там вполне может фигурировать как часть формулы!

                                                  Почему бы в синтаксисе не предусмотреть квотирование? Пример из коммента ниже "[Файл]Лист!$A$8" может выглядеть вполне как "[Файл]'Лист: *красненький*, \для Мариванны\'$A$8"
                                                  Эти проблемы давно решены.
                                                • 0
                                                  Потому что потом вам надо будет делать ссылку на ячейку вида "[Файл]Лист!$A$8". Если у вас будут левые символы, то ссылка не распарсится и что-то обязательно упадет в другом месте или посчитает неверный результат.

                                                  Собственно та же самая проблема, что и с названиями файлов — если они сами по себе, то без разницы, а если нужно использовать их где-то, то уже важно название.
                                                  • 0
                                                    Ой, да ну что за проблема! В T-SQL, значит, можно экранировать [Пробелы и прочую ересь] квадратными скобками в именах колонок, таблиц и прочего, а в Excel проблема так же распарсить?
                                                • –4
                                                  MS всё прекрасно понимает. Если бы вы дочитали статью до конца, то увидели бы, что символы они тоже проверяют — чуть позже. А тут они хотели сделать «как лучше». Проблема в том, что две раскладки бывают только в ограниченном числе стран: там Греция, Россия, Израиль… если людей из этих стран в команде нет, то может не найтись никого, кто бы осознавал не только то, что в природе бывают раскладки, но и то, что в природе бывают люди, которые их во время работы регулярно меняют — и их довольно много…

                                                  P.S. Причём тут именно важно иметь людей именно из этих стран. Эмигранты часто смиряются с тем, что раскладка на клавиатуре не написана и пользуются всякими translit.ru, если им нужно вводить русский текст.
                                                  • +6
                                                    Я б сказал что двух раскладок НЕ бывает в ограниченном числе стран, а остальные минимум с двумя и живут. Вот только MS из США, а там как раз она одна.
                                                    • –8
                                                      Опять этот великорусский шовинизм, LOL. «Остальные» — это хто? США и Европа (включая Турцию), Латинская Америка и Китай, Япония и Австралия — все они живут с одной раскладкой. Да-да, даже страны, где пишут иероглифами. Там ввод текста осуществляется совсем особым образом — но именно поэтому проверка скан-кодов никому не мешает. Так что, увы и ах, но это именно страны с двумя кодировками — исключение. Потому с ними и возникают проблемы то в Linux, то в Windows. А вовсе не потому, что софт только в Штатах разрабатывают.
                                                      • +1
                                                        А это что?
                                                        en.wikipedia.org/wiki/German_keyboard_layout
                                                        The German keyboard layout is a QWERTZ keyboard layout commonly used in Germany and Austria
                                                        • 0
                                                          Ммм. Не понял вопроса. Это клавиатура, которой пользуются в германии, QWERTZ, да. QWERTY ни при этом, разумеется, не пользуют, раскладки не переключают, Office и другие подобные «сумасшедшие» программы их не напрягают. В чём проблема?
                                                          • 0
                                                            В немецкой раскладке прекрасно можно писать на английском, я гарантирую это.
                                                            • –1
                                                              Там если начать ввод на обычной раскладке, а потом переключиться на эту дополнительную то тот знак что находится где «:» тоже нельзя будет ввести. Вряд ли только он вводится так же часто как Ж.
                                                              • 0
                                                                Там нет никакой «основной» и «дополнительной». Все многочисленные символы, которые вы там видите вводятся с разными всякими AltGr'ами в основной раскладке и Office со своими трюками это прекрасно поддерживает.
                                                          • +1
                                                            Как-то слишком самоуверено.
                                                            Япония
                                                            Как вы быстро лишили японцев хираганы и катаканы. У них есть ввод каной. Поэтому в принципе ромадзи там могло и не быть. Просто ромадзи навязали IME очень наворочен и позволяет задать клавишу на переключение внутренней раскладки с кана на ромазди и обратно. У нас к слову тоже есть умельцы которые впихнули в одну раскладку и латиницу и кириллицу и сделали переключение по caps lock (при этом не сломав верхний регистр по Shift, но сломав типичную проверку орфографии). В общем японцам тут чуть больше повезло. А так объективно их нельзя выписывать из списка двух-раскладочных. Сюда ещё можно добавить Корею. Как у китайцев я не знаю.
                                                            На память приходит что ещё свои раскладки есть у:
                                                            • Армении
                                                            • Грузии
                                                            • Тайланда
                                                            Про прочие кириллические — Украину, Беларусию, Казахстан и т. п. думаю нет смысла писать?

                                                            Одна раскладка только у стран где принята в основе латиница (доп знаки они набирают через AltGr) и то как видно в случае Германией есть исключение.
                                                            • –3
                                                              Поэтому в принципе ромадзи там могло и не быть.
                                                              Не могло. Компьютеры японцы получили с Запада и хотя изначально они тоже были двураскладочниками, но латинница там была изначально. Каны не было — это да.
                                                              Как вы быстро лишили японцев хираганы и катаканы.
                                                              Вот именно они и вводились на второй раскладке на какой-нибудь MSX. Но в современных системах (хоть Windows, хоть ChromeOS) японцы — однораскладочники.
                                                              А так объективно их нельзя выписывать из списка двух-раскладочных. Сюда ещё можно добавить Корею. Как у китайцев я не знаю.
                                                              У всех трёх есть переключение режимов внутри одной раскладки. Собственно IME есть пошла из Китая — причём она в ранние времена была программно-аппаратным комплексом, на продаже которого поднялась одна небезизвестная компания. Microsoft свою версию разработал вроде бы независимо, но «по образу и подобию». И, опять-таки: поскольку всё это надстраивалось над QWERTY, то латинница там была в основе изначально.

                                                              У меня просто есть знакомый, занимавшийся разработкой ChromeOS. Так вот: первой страной, которая потребовала заморачиваться с двумя раскладками была Россия. Греки и евреи были уже позже. А до этого они «окучили» большую часть мира, включая Японию, часть Латинскую Америки и Африки.

                                                              Возможно в какой-то другой, альтернативной, вселенной развитие компьютерной техники могло пойти иначе и там бы Япония и Китай попали бы в список «многораскладочников». Но, увы, на нашей планете этого не случилось и мы с вам попадаем в жалкое меньшинство о котором редко кто задумывается.

                                                              Я не говорю, что это хорошо — это просто неизбежно.
                                                              • 0
                                                                Странам, набирающим символы через AltGr тоже можно свинью подложить, использовав в программе шорткаты Ctrl + Alt + something.
                                                                Мало кто из русских программистов знает, что таким образом можно заблокировать ввод некоторых символов туркам, полякам и т.д. 8)
                                                          • 0
                                                            Какое-то нелепое оправдание. Если продукт идёт на рынок других стран, он должен разрабатываться с учётом их особенностей и тестироваться в том числе в их условиях.
                                                            • 0
                                                              Microsoft не раскрывает подробную статистику по продажам в разных странах, но есть основания считать, что вряд ли он получает в двураскладочных странах более нескольких процентов продаж.

                                                              Если продукт идёт на рынок стран, которые приносят вам 1% дохода, то вы выделите на адаптацию ресурсов ровно столько, сколько он заслуживает. Никто не будет разрабатывать продукт специально для такого рынка. Его доработают — как смогут.

                                                              Более того, если вам придётся жизнь людей с этого однопроцентного рынка сильно ухудшить из-за того, что какая-то фишка облегчит при этом жизнь 99% ваших потребителей — это нужно делать особо не задумываясь, так как улучшение продаж на, скажем, 10% на двадцатипроцентном рынке скомпенсирует вам возможные потери с лихвой. Простая математика.

                                                              Очевидно тестировщики этот баг не воспроизвели, а если и воспроизвели — то не обратили внимание.
                                                              • +3
                                                                Microsoft не раскрывает подробную статистику по продажам в разных странах
                                                                есть основания считать что вряд ли он получает в двураскладочных странах более нескольких процентов продаж
                                                                Взаимоисключающие параграфы.
                                                                Ваши домыслы ничем не подкреплены.
                                                                • 0
                                                                  Если вы считаете, что единственные данные, на основании которых можно что-то оценивать — это бумажки, издаваемые Microsoft'ом, то мне вас жаль. Это для компании «рога и копыта», продающей два с половиной компьютера в день невозможно точно узнать сколько точно и кому она продала, но тут мы всё-таки про лидера рынка говорим! Есть данные об объемах рынка, есть данные о распространённости пиратской продукции, есть данные о ценах в разных странах, наконец! Это вполне достаточно для того, чтобы примерно оценить объёмы и перспективность рынков.
                                                                  • 0
                                                                    И давно ли Mircosoft стал лидером рынка? По Вашей ссылке он упоминается два раза — 5% в тексте и четвёртое место в графике. Давайте определимся, о рынке чего идёт речь.

                                                                    А потом определимся, относить ли к «однораскладочным» странам Китай и Индию, с её месивом культур и национальностей.
                                                            • 0
                                                              Израиль…

                                                              Кто ещё шовинист…

                                                              Допустим, что нас тут в Израиле мало и поэтому с локализацией заморачиваются по минимуму — и не только в программном обеспечении. Но есть ещё двоюродные братья (арабы) коих куда больше. А для них актуально всё то же, что и для нас: своя раскладка клавиатуры, RTL. И даже больше: у них количество символов поболее, ибо есть всякие лигатуры и обязательные огласовки (в иврите огласовки опциональны, а реально ли вводить теамим — я даже не знаю).
                                                              Кроме того, у арабов даже цифры свои
                                                          • 0
                                                            В одной из древних, ещё до поглощения Adobe-ом, версий среды разработки Macromedia Flash было невозможно использовать букву «я» ни в коде скрипта, ни даже в комментариях.
                                                            Приходилось в таких случаях обходить баг при помощи escape-последовательность \377.
                                                            • 0
                                                              Был такой редактор, одно время очень популярный: MultiEdit. В нём та же проблема была. Причём в DOS это никому не мешало (там символ с кодом 255 — это «неразрывный пробел», который мало кого волновал в те годы), а в Windows (где туда попала полезная буква «я») — это стало просто катастрофой.
                                                              • 0
                                                                В каком-то редакторе ресурсов от Borland была та же фигня и так же решалась. При этом с \376 там тоже были проблемы.
                                                              • –3
                                                                интересно, минусует один и тот же пользователь?
                                                                • +2
                                                                  Еще один workAround — фиксится CapsLock+ж+CapsLock
                                                                  • 0
                                                                    Хорошо что все комментарии прочитал…
                                                                    А то сейчас бы дубль был.
                                                                  • –3
                                                                    Ещё заметил, что блочится "?". Так вот, берём Английский язык и пытаемся поставить знак вопроса (Shift+/). Вопросительный знак не ставится. Переключаемся на Русскую клавиатуру и пытаемся поставить запятую той-же комбинацией. Поздравляю! Вы получили ещё одну нерабочую кнопку :D
                                                                    • +3
                                                                      Это уже есть в статье, и включено в исправление ошибки, описанное в последних 2 абзацах.

                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.