Bush hid the facts
Bush hid the facts(“부시가 사실을 숨겼다”)는 윈도우, 특히 윈도우 2000 이후에 포함된 메모장의 오류를 흔히 부르는 이름이다. 이 오류는 다음과 같은 방법으로 재현할 수 있다.[1]
- 메모장에 Bush hid the facts라고 치고 ANSI 인코딩으로 저장한다.
- 메모장을 닫고, 그 파일을 다시 열어 본다.
- 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 대신 나타난 문자열(畂桳栠摩琠敨映捡獴)을 해석해 보면 다음과 같다.
畂 | 땅 갈아 일어난 흙 |
---|---|
桳 | 수레 덮개 |
栠 | 나무가 연하다 |
摩 | 문지르다 |
琠 | 귀막이 |
敨 | 펴다 |
映 | 비치다 |
捡 | 단속하다 |
獴 | 몽계 |
각주
[편집]- ↑ 윈도우 비스타 이후 버전에는 이 버그가 고쳐졌기 때문에 이 버그가 작동하지 않는다.
- ↑ The Old New Thing - 메모장 파일 인코딩 문제, redux
외부 링크
[편집]- (영어) Hoax Slayer의 설명 Archived 2008년 1월 20일 - 웨이백 머신