Bush hid the facts

Bush hid the facts(“부시가 사실을 숨겼다”)는 윈도우, 특히 윈도우 2000 이후에 포함된 메모장의 오류를 흔히 부르는 이름이다. 이 오류는 다음과 같은 방법으로 재현할 수 있다.[1]

  1. 메모장에 Bush hid the facts라고 치고 ANSI 인코딩으로 저장한다.
  2. 메모장을 닫고, 그 파일을 다시 열어 본다.
  3. Bush hid the facts 대신 알아 볼 수 없는 한자들(이 경우 畂桳栠摩琠敨映捡獴)로 바뀌어 있을 것이다. (올바른 언어팩이 설치되어 있지 않은 경우 사각형 모양의 도형이 대신 나타난다.)

혹자는 이 오류를 음모론으로 보기도 했지만, Bush hid the facts 말고도 다양한 문자열(예를 들어 This app can break)이 이 오류를 일으키기 때문에 설득력이 떨어진다. KBS에서 방영하는 스펀지에서는 방송에서 이 오류를 다루면서, 위 과정에서 나타나는 한자가 ‘사실은 자기가 숨겨도 언젠가는 밝혀진다’라는 의미라고 해석하기도 하였다.

오류의 원인 편집

이 오류는 메모장이 내부적으로 사용하는 윈도우 API 함수 IsTextUnicode가 짧은 문자열에 대해 잘못된 문자 인코딩을 반환해서 생기는 문제이다. 예를 들어서 畂桳栠摩琠敨映捡獴는 사실 ANSI 인코딩으로 표현된 원래 문자열을 엔디언 형식으로 저장된 UTF-16 문자열로 해석해서 나온 문자열이다.

구체적으로 ‘Xxxx xxx xxx xxxxx’ 형식으로 쓰인 여러 영어 문자열이 이 버그에 영향을 받을 수 있다. (하지만 Bush hid the truth와 같이 이 버그에 영향을 받지 않는 문자열도 있다.) 이 문자열들은 UTF-16으로 해석했을 때 보통 U+6100부터 U+7AFF에 이르는 영역의 문자로 해석되며, 이 문자들은 모두 한자에 속하기 때문에 알아 볼 수 없는 한자로 보이는 것이다.

레이먼드 첸은 이 문제에 대해 자신의 블로그에서 바이트 순서 표식(BOM)이 없는 경우 UTF-16을 자동으로 선택하지 말 것을 제안했다.[2]

자세히 편집

메모장이 파일을 ANSI 인코딩으로 제대로 인식하지 못하고 UTF-16 리틀 엔디언으로 인식해서 열었기 때문이다. 이제 Bush hid the facts 글자 각각의 ANSI 값을 알아보자.

  • 공백: 0x20
  • B: 0x42
  • a: 0x61
  • c: 0x63
  • d: 0x64
  • e: 0x65
  • f: 0x66
  • h: 0x68
  • i: 0x69
  • s: 0x73
  • t: 0x74
  • u: 0x75

ANSI 인코딩에선 이 글자들이

42 75 73 68 20 68 69 64 20 74 68 65 20 66 61 63 74 73

으로 저장된다. 그러나 이 글자들은 UTF-16 리틀 엔디언으로

75 42 68 73 68 20 64 69 74 20 65 68 66 20 63 61 73 74

로 바뀐다. 이는

75-42 68-73 68-20 64-69 74-20 65-68 66-20 63-61 73-74

로 두 글자 단위로 묶이며, 결과로

U+7542 U+6873 U+6820 U+6469 U+7420 U+6568 U+6620 U+6361 U+7374를 출력하게 한다. 따라서 출력 결과는 畂桳栠摩琠敨映捡獴이다. (대문자 B(0x42) 대신 소문자 b(0x62)로 했다면, U+7542 대신 U+7562 가 출력된다.)

참고사항 편집

Bush hid the facts 대신 나타난 문자열(畂桳栠摩琠敨映捡獴)을 해석해 보면 다음과 같다.

땅 갈아 일어난 흙
수레 덮개
나무가 연하다
문지르다
귀막이
펴다
비치다
단속하다
몽계

참조 편집

  1. 윈도우 비스타 이후 버전에는 이 버그가 고쳐졌기 때문에 이 버그가 작동하지 않는다.
  2. The Old New Thing - 메모장 파일 인코딩 문제, redux

외부 링크 편집