Bush ukrył fakty
Bush ukrył fakty to popularna 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ł kodem UTF-16LE , co skutkuje zniekształceniem tekstu . Kiedy ciąg „Bush ukrył fakty” bez cudzysłowów został umieszczony w nowym Notatnika i zapisany, zamknięty i ponownie otwarty, zamiast tego pojawiła się bezsensowna sekwencja chińskich znaków „ 畂 桳 栠 摩 琠 敨 映 捡 獴 ”.
Podczas gdy „ Bush ukrył fakty” to zdanie najczęściej prezentowane w Internecie w celu wywołania błędu, błąd może zostać wywołany przez inne ciągi zawierające litery i spacje w tych samych pozycjach, na przykład „hhhh hhh hhh hhhhh” lub „ta aplikacja może pęknąć" . Inne sekwencje również powodują błąd, w tym po prostu tekst „a” . [ Potrzebne źródło ] (To najczęściej używane zdanie jest odniesieniem do wypowiedzi prezydenta USA George'a W. Busha na temat broni jądrowej w Iraku .)
Błąd występuje, gdy ciąg jest przekazywany do funkcji wykrywania zestawu znaków Win32 IsTextUnicode
. IsTextUnicode
widzi, że bajty są zgodne z kodowaniem UTF-16LE przypisanych punktów kodowych Unicode, dochodzi do wniosku, że tekst jest prawidłowym UTF-16LE i zwraca true
, a następnie aplikacja nieprawidłowo interpretuje tekst jako UTF-16LE.
Błąd istniał od czasu wprowadzenia IsTextUnicode w
systemie Windows NT 3.5 w 1994 r., ale został odkryty dopiero na początku 2004 r. Wiele edytorów tekstu i narzędzi wykazuje takie zachowanie w systemie Windows, ponieważ używają IsTextUnicode
do określania 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 wszystkie inne narzędzia korzystające z tej funkcji nadal mają wpływ.
Obejścia
Istnieje kilka obejść tego błędu:
- Edytowanie tekstu tak, aby nie był wzorcem wywołującym ten błąd, pozwoli go uniknąć. Na przykład dodanie nowej linii w pierwszych 20 znakach będzie działać.
- Jeśli plik jest zapisany jako „ UTF-8 ” (sprzed 2018 r.) lub „UTF-8 z BOM” (po 2018 r.) zamiast „ANSI”, tekst ładuje się poprawnie, ponieważ Notatnik dodaje znacznik kolejności bajtów UTF-8 , który jest wzorzec, który nie powoduje błędu. Otwarcie pliku, który jest prawidłowym UTF-8 bez znacznika kolejności bajtów, nadal powodowałoby błąd, ponieważ ta sekwencja jest reprezentowana identycznie w UTF-8, jak w ASCII.
- Błędu można również uniknąć, zapisując jako „Unicode”, co w Microsoft Windows oznacza UTF-16LE. Podczas ładowania tego tekstu
IsTextUnicode
powinien (i robi) zwracać wartość true, a tekst jest poprawny. - Aby pobrać oryginalny tekst za pomocą Notatnika, otwórz okno dialogowe „Otwórz plik”, wybierz plik, wybierz „ANSI” lub „UTF-8” w polu listy „Kodowanie” i kliknij Otwórz. W systemie Windows 2000 w Notatniku brakuje pola listy „Kodowanie”. Notepad2 również tego nie ma. program WordPad ładuje tekst poprawnie bez wybierania kodowania, ponieważ wykorzystuje własne wykrywanie kodowania.