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-endianUTF-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로 저장합니다. recodeiconv 와 같은 도구 가 있습니다.


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.