Буш скрыл факты

Ошибка в Microsoft Windows

« Буш скрыл факты » — это общее название ошибки в Microsoft Windows , которая приводит к тому, что текст в кодировке ASCII интерпретируется как UTF-16LE , что приводит к искажению текста . Если вставить строку «Буш скрыл факты» без кавычек в новый документ Блокнота , сохранить, закрыть и снова открыть, то вместо нее появится бессмысленная последовательность китайских иероглифов «畂桳栠摩琠敨映捡獴». [1]

Хотя предложение « Буш скрыл факты» является наиболее часто используемым для возникновения ошибки, ошибка может быть вызвана и другими строками, например, «hhhh hhh hhh hhhhh» [2] или «это приложение может сломаться» [ 3] и даже «a» или «z!» [1] .

Диаграмма, поясняющая ошибку

Ошибка возникает, когда строка передается в функцию определения кодировки Win32 IsTextUnicode . IsTextUnicode предполагает, что это Unicode, если «старший байт» (нечетные индексы) изменяется в три раза меньше, чем «младший байт», [1] если это так, то возвращается true , и приложение затем неправильно интерпретирует текст как UTF-16LE. [4]

Ошибка существовала с момента появления IsTextUnicode в Windows NT 3.5 в 1994 году, но была обнаружена только в начале 2004 года. [5] Многие текстовые редакторы и инструменты демонстрируют такое поведение в Windows, поскольку они используют IsTextUnicode для определения кодировки текстовых файлов. Начиная с Windows Vista , Notepad был изменен для использования другого алгоритма обнаружения, который не демонстрирует ошибку, но IsTextUnicode остается неизменным в операционной системе, поэтому любые другие инструменты, использующие эту функцию, по-прежнему подвержены влиянию. [6]

Обходные пути

Для этой ошибки существует несколько способов решения:

  • Добавьте символ, чтобы длина строки составляла нечетное число байтов.
  • Сохраните файл как " UTF-8 " (до 2018) или "UTF-8 with BOM" (после 2018), а не "ANSI". Это добавляет метку порядка байтов UTF-8 , что позволяет избежать ошибки. [ необходима цитата ] UTF-8 без метки порядка байтов все равно вызовет ошибку, так как он идентичен файлу "ANSI".
  • Сохранение в формате "Unicode", что в Microsoft Windows означает UTF-16LE. При загрузке этого текста IsTextUnicode должен (и возвращает) true , и текст будет правильным.
  • Чтобы извлечь исходный текст с помощью Notepad, откройте диалоговое окно «Открыть файл», выберите файл, выберите «ANSI» или «UTF-8» в списке «Кодировка» и нажмите «Открыть». В Windows 2000 в Notepad нет списка «Кодировка». WordPad , похоже, загружает текст правильно, не выбирая кодировку, поскольку использует собственное определение кодировки.

Ссылки

  1. ^ abc "Буш скрыл факты" ОБЪЯСНЕНИЕ ошибки, 4 июля 2023 г. , получено 04.09.2024
  2. ^ Кристенсен, Бретт М. (2 ноября 2009 г.). "Буш скрыл факты - заявление о заговоре в блокноте". Hoax Slayer . Архивировано из оригинала 2010-03-15.
  3. ^ Каплан, Майкл С. (14 июня 2006 г.). «Behind „How to break Windows Notepad“». archives.miloush.net . Архивировано из оригинала 25 октября 2013 г. . Получено 2022-07-12 .{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  4. ^ Чен, Рэймонд (24 марта 2004 г.). «Некоторые файлы странно отображаются в Блокноте». The Old New Thing . Microsoft . Получено 12 июля 2022 г.
  5. Кампс, Дэвид (27 февраля 2004 г.). «Ошибка блокнота? Проблема с кодировкой?». #region .Net Blog . Получено 15 февраля 2009 г.
  6. ^ Каплан, Майкл С. (25 марта 2008 г.). «Буш, возможно, все еще скрывал факты, но он не может скрыть их от Vista SP1/Server 2008 Notepad!» . Получено 13 апреля 2017 г.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Bush_hid_the_facts&oldid=1248300640"