Bush hid the facts

Z Wikipedii, wolnej encyklopedii

Bush hid the facts (dosł. Bush ukrył fakty) – powszechna nazwa błędu występującego w niektórych wersjach systemu Microsoft Windows, który powoduje, że tekst zakodowany w ASCII jest interpretowany tak, jakby był UTF-16LE, co skutkuje zniekształconym tekstem. Kiedy ciąg „Bush hid the facts”, wstawiony bez nowego wiersza i cudzysłowów, został umieszczony w nowym dokumencie Notatnika i zapisany, zamknięty i ponownie otwarty, zamiast tekstu wyświetlał się bezsensowny ciąg chińskich znaków畂桳栠摩琠敨映捡獴”.

Chociaż „Bush hid the facts” to zdanie najczęściej prezentowane w Internecie w celu wywołania błędu, chociaż błąd może zostać wywołany przez ciągi znaków z literami i spacjami w tych samych pozycjach, na przykład „hhhh hhh hhh hhhhh”[1]. Błąd wywołują również inne sekwencje, w tym nawet tekst „a ”.

Błąd występuje, gdy ciąg jest przekazywany do funkcji wykrywania zestawu znaków Win32 IsTextUnicode.

IsTextUnicode wykrywa, że bajty są zgodne z kodowaniem UTF-16LE prawidłowych (jednakże bezsensownych) chińskich znaków Unicode, stwierdza, że tekst jest zakodowany chińskim UTF-16LE i zwraca wartość true, a następnie aplikacja nieprawidłowo interpretuje tekst jako UTF-16LE[2].

Błąd istniał od momentu wprowadzenia komponentu IsTextUnicode w Windows NT 3.5 w 1994 r., Ale został wykryty dopiero na początku roku 2004[3]. Wiele edytorów tekstu i narzędzi wykazuje takie zachowanie w systemie Windows, ponieważ używają IsTextUnicode do określenia kodowania plików tekstowych. Począwszy od systemu Windows Vista, Notatnik został zmodyfikowany tak, aby używał innego algorytmu wykrywania, który nie wykazuje błędu, ale IsTextUnicode pozostaje niezmieniony w systemie operacyjnym, więc wszelkie inne narzędzia korzystające z tej funkcji są nadal narażone na błąd[4].

Obejścia[edytuj | edytuj kod]

Istnieje kilka obejść tego błędu:

  • edytowanie tekstu tak, aby nie był wzorem wyzwalającym ten błąd, pozwoli go uniknąć. Na przykład dodanie nowego wiersza jako jednego z 20 pierwszych znaków będzie działać;
  • jeśli plik zostanie zapisany z kodowaniem „UTF-8” zamiast „ANSI”, tekst załaduje się poprawnie, ponieważ Notatnik przygotowuje BOM UTF-8, który jest wzorem, który nie wyzwala błędu. UTF-8 bez BOM nadal wyzwalał błąd, ponieważ sekwencja ta jest reprezentowana identycznie w UTF-8 jak w ASCII;
  • błędu można również uniknąć, zapisując plik z kodowaniem „Unicode”, co w systemie Microsoft Windows oznacza UTF-16LE. Podczas ładowania tego tekstu komponent IsTextUnicode powinien (i robi tak) zwracać wartość true, a tekst jest poprawny;
  • aby odzyskać oryginalny tekst za pomocą Notatnika, należy otworzyć okno dialogowe „Otwórz plik”, wybrać plik oraz kodowanie „ANSI” lub „UTF-8” z listy „Kodowanie” i kliknąć przycisk Otwórz. W systemie Windows 2000 w Notatniku nie ma pola „Kodowanie”. Notepad2 również go nie posiada. WordPad ładuje tekst poprawnie bez potrzeby wybierania kodowania, ponieważ wykorzystuje własny algorytm wykrywania kodowania.

Przypisy[edytuj | edytuj kod]

  1. Brett M. Christensen: Bush Hid The Facts – Notepad Conspiracy Claim. Hoax Slayer. (ang.).
  2. Raymond Chen: Some files come up strange in Notepad – The Old New Thing. blogs.msdn.com. (ang.).
  3. David Crumps: Notepad bug? Encoding Issue?. #region .Net Blog. [dostęp 2009-02-15]. (ang.).
  4. Michael S. Kaplan: Bush might've still hid the facts, but he can't hide them from Vista SP1/Server 2008 Notepad. [dostęp 2017-04-13]. (ang.).