Windows 7 UTF-8 및 유니 코드


14

누군가 Windows 7 (Pro 64 비트)에서 변경된 사항을 설명해 주시겠습니까?

세부 정보 : 이전에는 Windows XP가 있었고 CSV 형식의 일부 변환 파일 (UTF-8로 인코딩)이있었습니다. 메모장과 Excel에서 글꼴을 볼 수있었습니다. Windows 7로 업그레이드 한 후이 파일을 열면 사각형 상자 만 표시됩니다 (브라우저에서 파일을 열면 모든 번역을 볼 수 있음). 해당 파일을 유니 코드로 저장하면 모든 것이 정상인 것 같습니다.

정확히 무슨 일이 일어나고 있습니까? Windows 7이 UTF-8이 아닌 유니 코드로 작동하는 이유는 무엇입니까?

답변:


30

Windows 7이 UTF-8이 아닌 유니 코드로 작동하는 이유는 무엇입니까?

술어

유니 코드 와 UTF-8 은 같은 종류가 아닙니다. 유니 코드는 문자 집합 (레퍼토리)을 정의하고 각 문자에 숫자 (코드 포인트)를 할당하는 문자 집합입니다. UTF-8은 디스크 또는 전송시 유니 코드 문자 스트림 을 나타내는 데 사용할 수있는 여러 인코딩 중 하나입니다 . 예를 들어, 동일한 유니 코드 문자 스트림을 UTF-16, UTF‑32 또는 UTF-7로 인코딩 할 수도 있습니다.

그러나, 메모장 제안은 다음을 포함한 옵션 "인코딩" ANSI, Unicode, Unicode big-endian와 UTF-8. 이것을 작성한 Microsoft 개발자가 잘못된 용어를 사용했습니다. "유니 코드"라고 할 때는 " UTF-16 little-endian "을 의미합니다. "ANSI"라고 말하면 코드 페이지 1252 (CP-1252)를 의미합니다.

Microsoft 메모장

Microsoft의 메모장은 바이트 순서 표시 ( BOM )와 함께 UTF-16을 쓰고 텍스트 파일을 읽을 때 메모장이 BOM을 찾습니다. BOM은 앱에 파일이 UTF-16임을 알리고 빅 엔디안인지 리틀 엔디안인지를 나타냅니다.

메모장이 BOM을 찾지 못하면 라이브러리 함수를 호출 IsTextUnicode하여 데이터를보고 어떤 인코딩이 사용되었는지 추측하려고합니다. 때로는 (필연적으로) 잘못 추측합니다. 때로는 "ANSI"파일이 "Unicode"인 것으로 추측합니다. UTF-16 또는 UTF-8 파일을 코드 페이지 1252로 해석하려고하면 잘못된 글리프가 표시되고 일부 8 비트 값을 렌더링 할 글리프를 찾을 수 없습니다. 그러면 사각형으로 표시됩니다.

harrymc가 그의 답변 에서 언급 했듯이 메모장에 대한 더 나은 대안이 있습니다. 그러나 메모장을 사용하면 파일을 열 때 메모장을 추측하지 않고 인코딩을 명시 적으로 선택할 수 있습니다.

바이트 주문 마크

유니 코드 컨소시엄에 따르면 바이트 순서 표시 (BOM)는 선택 사항입니다. 그러나 Windows는 BOM을 사용하여 일부 인코딩을 구분합니다.

간단히 말해, 어떤 이유로 파일에 BOM이 부족했을 수 있습니다. 업그레이드 프로세스 중에 BOM이 언젠가 손실 되었습니까?

정사각형으로 표시되는 원본 파일이 여전히 있으면 16 진 덤프를 만들어 BOM이 포함되어 있는지 확인할 수 있습니다.


일반 텍스트 파일 표준

문제는 효과가 없다는 것입니다 아무도 일반 텍스트 파일에 대한 더 보편적 인 기준 -. 대신에 우리는 많은 부적합과 알 수없는 것들을 가지고 있습니다.

  • 줄 끝은 어떻게 표시 되었습니까? 일부 플랫폼은 제어 문자 캐리지 리턴 (CR) 뒤에 줄 바꿈 (LF)을 사용하고 일부는 CR 만 사용하고 일부는 LF 만 사용합니다.

  • 위의 터미네이터 또는 세퍼레이터입니까? 이것은 파일의 끝에 영향을 미치며 문제를 일으키는 것으로 알려져 있습니다.

  • 탭 및 기타 제어 문자 처리 줄의 시작 부분에서 8 개의 표준 문자 너비의 배수에 맞추기 위해 탭을 사용한다고 가정 할 수 있지만 실제로는 이에 대한 확신이 없습니다. 많은 프로그램에서 탭 위치를 변경할 수 있습니다.

  • 문자 세트 및 인코딩? 파일의 텍스트에 사용 된 것을 나타내는 표준은 없습니다. 가장 가까운 것은 인코딩이 유니 코드에 사용 된 것 중 하나임을 나타내는 BOM이 있는지 확인하는 것입니다. BOM 값에서 파일을 읽는 프로그램은 UTF-8과 UTF-16 등과 UTF-16의 Little-Endian 및 Big-Endian 변형 등을 구별 할 수 있습니다. 파일을 표시하기위한 보편적 인 표준은 없습니다. CP-1252 또는 KOI-8과 같은 다른 인기있는 인코딩으로 인코딩됩니다.

등등. 위의 메타 데이터는 텍스트 파일에 기록되지 않으므로 최종 사용자는 파일을 읽을 때 프로그램에 알려야합니다. 최종 사용자는 특정 파일의 메타 데이터 값을 알고 있거나 해당 프로그램이 잘못된 메타 데이터 값을 사용할 위험을 감수해야합니다.

부시 대통령은 사실을 숨겼다

Windows XP에서 이것을 시도하십시오.

  • 메모장을 엽니 다.
  • 글꼴을 Arial Unicode MS로 설정하십시오. (먼저 설치해야합니다. 메뉴에 표시되지 않으면 "글꼴 더보기"를 클릭하십시오.)
  • "Bush hid facts"텍스트를 입력하십시오.
  • 를 선택하십시오 Save As. 로부터 Encoding메뉴를 선택합니다 ANSI.
  • 메모장을 닫습니다.
  • 문서를 다시여십시오 (예 : Start, My Recent Documents).
  • "Bush hid facts"대신에 see이 표시됩니다.

이것은 IsTextUnicode메모장에서 사용 하는 함수가 ANSI (실제로 코드 페이지 1252) 텍스트가 BOM이없는 유니 코드 UTF-16LE임을 잘못 추측 함을 나타냅니다. 로 저장된 파일에는 BOM이 없습니다 ANSI.

윈도우 7

Windows 7에서 Microsoft IsTextUnicode는 위의 상황이 발생하지 않도록 조정했습니다 . BOM이 없으면 이제 유니 코드 (UTF-16LE)보다 ANSI (CP 1252)를 추측 할 가능성이 높습니다. Windows-7 을 사용하면 리버스 문제가 발생할 가능성이 더 높습니다. 코드 포인트가 255보다 크지 만 BOM이없는 유니 코드 문자가 포함 된 파일은 이제 ANSI로 추측되어 잘못 표시 될 가능성이 높습니다.

인코딩 문제 방지

현재 가장 좋은 방법은 모든 곳에서 UTF-8을 사용하는 것 같습니다. 이상적으로 모든 오래된 텍스트 파일을 UTF-8로 다시 인코딩하고 텍스트 파일 만 UTF-8로 저장합니다. recode 및 iconv 와 같은 도구 가 있습니다.


3
Wikipedia 에 따르면 : Windows Vista 및 Windows 7에서 [..] IsTextUnicode는 UTF-16LE 대신 바이트 기반 인코딩을 추측 할 수 있도록 변경되었습니다.
— Arjan

예, BOM을 사용하여 파일을 생성하므로 해당 파일에 BOM이 있습니다. Windows 7이 이전 OS에서 작성된 BOM을 읽지 못한다는 것이 흥미 롭습니다.
— Sha Le

BOM이 변경되지 않았습니다. 파일에 BOM이 누락되었을 수 있지만 이전에는 기본 형식이 일부 유니 코드 변형이었으며 이제 ASCII 형식입니다. 내 대답을 참조하십시오.
— harrymc

@Sha Le : 파일에 BOM이있는 경우 Windows 7 메모장에서 파일을 올바르게 열어야하므로 설명하는 문제가 알려진 문제와 맞지 않습니다 isTextUnicode. BOM이 포함 된 파일의 문제점을 설명하는 작은 샘플 파일을 작성할 수 있습니까?
— RedGrittyBrick

this app can breakBush hid the facts
— Regent

3

비고 : 인코딩 메뉴를 사용하여 메모장 ++ 을 사용하여 이러한 파일을 볼 수 있습니다 .

파일이 올바르게 표시되면 저장하면 올바른 BOM이 추가됩니다.


나는이 게시물이 조금 오래되었다는 것을 알고 있지만 파일이 notepad ++ v5.9.6.2 자체를 사용하여 처음 만들어 졌을 때 win 7 및 notepad ++가 BOM없이 UTF 8을 표시하지 않는 문제가 있습니다.
— Jake

@Jake : 인코딩 메뉴에 "BOM없이 UTF8로 인코딩"대신 "UTF8로 인코딩"이 표시되는지 확인하십시오.
— harrymc

1

Windows 10에서 가능 (1903 빌드 테스트)

  1. 올바른 인코딩 TXTUTF-8.txt으로 파일을에 복사하십시오 C:\WINDOWS\SHELLNEW.
  2. 에서 HKEY_CLASSES_ROOT\.txt\ShellNew"이름으로 새 체인을 FileName"
  3. "값 변경 FileName"을 " TXTUTF-8.txt"

이제 Windows 메뉴를 사용하여 새 txt 파일을 만들면 TXTUTF-8.txt템플릿으로 사용됩니다.

출처 : https://answers.microsoft.com/fr-fr/windows/forum/all/configurer-lencodage-par-d%C3%A9faut-en-utf-8-dans/9c0358ca-a2b3-43e8-a154- d10c1fe94317

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.