태그 보관물: ascii

ascii

Linux와 Windows .txt 파일의 차이점 (유니 코드 인코딩) 영향을 받습니까? 디스플레이에 관심이 없습니다. 즉,

원래 ANSI 표준에 정의 된 128 자 세트 만 사용하고 있습니다.

그러나 전체적으로 파일이 어떻게 다른 방식으로 영향을 받습니까?

디스플레이에 관심이 없습니다. 즉, 탭이 6 또는 8 자로 표시되지만 메모리의 실제 내부 표현 인 경우

내가 들었던 한 가지 차이점은 \ r \ n (Windows) 대 \ n을 줄 종결 (Linux)에 사용한다는 것입니다.



답변

Windows에서 “유니 코드”는 UTF-16LE이며 각 문자는 2 또는 4 바이트입니다. Linux는 UTF-8을 사용하며 각 문자는 1-4 바이트입니다.

“절대적으로 모든 소프트웨어 개발자는 절대적으로 유니 코드 및 문자 집합에 대해 반드시 알아야합니다 (변명 없음)”


답변

줄 바꿈

Windows는 CRLF ( \r\n, 0D 0A) 줄 끝을 사용하지만 Unix는 LF ( \n, 0A) 만 사용합니다 .

문자 인코딩

가장 현대적인 (즉 2004 년 이후) 유닉스 계열 시스템은 UTF-8 을 기본 문자 인코딩으로 만듭니다.

그러나 Windows에는 UTF-8에 대한 기본 지원이 없습니다. 내부적으로 UTF-16으로 작동하며 char기반 문자열이 레거시 코드 페이지 에 있다고 가정합니다 . 다행히 메모장은 UTF-8 파일을 읽을 수 있습니다. 불행히도 “ANSI”인코딩이 여전히 기본값입니다.

문제가있는 특수 문자

U + 001A 대체품

Windows는 드물게 Ctrl+ Z를 파일 끝 문자로 사용합니다. 예를 들어, type명령 프롬프트에 파일이 있으면 첫 번째 1A바이트 에서 잘립니다 .

유닉스에서 Ctrl+ Z는 특별한 것이 아닙니다.

NO-BREAK SPACE가있는 U + FEFF ZERO (바이트 순서 표시)

Windows에서 UTF-8 파일은 종종 “바이트 순서 표시” EF BB BF로 시작하여 ANSI 파일과 구별됩니다.

Linux에서는 BOM이 쉘 스크립트에서 shebang 행과 같은 것을 끊기 때문에 권장하지 않습니다. 또한 UTF-8이 기본 인코딩 인 경우 UTF-8 서명을 갖는 것은 의미가 없습니다.


답변

내가 들었던 한 가지 차이점은 줄 바꿈 (Linux)에 \ r \ n (Windows) 대 \ n을 사용한다는 것입니다.

예. 대부분의 UNIX 텍스트 편집기는이를 자동으로 처리하고 Windows 프로그래머 편집기는이를 처리 할 수 ​​있지만 일반 텍스트 편집기 (기본 메모장)는 처리하지 않습니다.

Windows 에서는 일부 상황에서 EOF (Ctrl-Z)가 파일 끝 으로 필요 하지만 UNIX에서는 절대 볼 수 없습니다.

MacOS X는 이제 UNIX 아래에 있으므로 UNIX 줄 끝을 사용합니다. OS X (MacOS 9 이하) 이전에는 자체 종료 (\ r)가있었습니다.

편집 : 다른 형식으로 CR 및 LF :

  • \ n은 ASCII 0x0A, 줄 바꿈 (LF)입니다.
  • \ r은 ASCII 0x0D, 캐리지 리턴 (CR)입니다.

답변

사용되는 유니 코드 인코딩은 OS 기반이 아닙니다.

Windows notepad.exe조차도 옵션이 나열되어 있습니다-(유니 코드가 아닌 ANSI), 유니 코드 (유니 코드 LE는 유니 코드 LE), 유니 코드 빅 엔디 언 (BE), UTF-8

ANSI는 유니 코드가 아니며 매우 제한된 수의 문자를 포함하므로 따로 보관하십시오.

그러나 메모장조차도 LE, BE 또는 UTF-8을 할 수 있음을 참조하십시오

메모장은 제쳐두고 UTF-8은 BOM의 유무에 관계없이 가능합니다.

그리고 Cygwin과 함께 Windows를 사용하지만 \ n을 지정하더라도 Windows 포트가 \ r \ n을 잘 수행 할 수 있습니다.

특정 OS가 사용하는 유니 코드 인코딩에 대한 규칙은 없습니다. 있다면 매우 유연한 OS가 아닐 것입니다.

차이점을 실제로 이해하려면 소프트웨어, 소프트웨어 조각의 인코딩 또는 사용에 대한 지식이 필요합니다.

Cygwin 및 xxd 및 / 또는 16 진 편집기를 가져 와서 실제로 파일 내부의 내용을보십시오. ‘file’명령을 사용하여 파일을 식별하십시오. 그러면 실제로 UTF 16bit LE가 무엇인지 알 수 있습니다. UTF 16bit BE는 무엇입니까? UTF-8이란 무엇입니까 (및 UTF-8은 BOM의 유무에 관계없이).

때로는 메모장에 유니 코드로 저장하도록 지시 할 수 있습니다 (메모는 16 비트 리틀 엔디안을 의미합니다). 그러나 arial unicode와 같은 unicode 글꼴을 선택하고 charmap에서 일부 unicode 문자를 복사하면됩니다. 메모장과 소프트웨어가 수행하는 작업을 확인하는 좋은 방법은 파일의 16 진수를 보는 것입니다.

C:\asdf>notepad.exe a.a

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>type a.a
aaa慡ൡ <-- though displayed aaa followed by some boxes in my cmd window
C:\asdf>

C:\asdf>xxd a.a
0000000: fffe 6100 6100 6100 6161 610d            ..a.a.a.aaa.

C:\asdf>

^^ The portion of the byte that stores the 61 is the lower value portion which with LE is stored first.

dd 명령 (Windows의 cygwin에서 실행하는 * nix 명령)으로 전환 할 수 있습니다

C:\asdf>xxd -p a.a
fffe6100610061006161610d

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>dd if=a.a conv=swab of=a.a2
0+1 records in
0+1 records out
12 bytes (12 B) copied, 0 seconds, Infinity B/s

C:\asdf>type a.a2
a  a a aaa
C:\asdf>xxd -p a.a2
feff00610061006161610d61

C:\asdf>file a.a2
a.a2; Big-endian UTF-16 Unicode text, with no line terminators

C:\asdf>

메모장 자체는 UTF-16 Big Endian 또는 UTF-16 Little Endian 또는 UTF-8로 저장할 수 있습니다.

여기에 이미지 설명을 입력하십시오

기술 담당자이거나 심지어 메모장 사용자 인 경우 OS로 인해 하나의 인코딩에 구속되지 않습니다!

UTF-8이 UTF-16보다 더 의미가 있다고 가정하면 UTF-16은 8 비트 만 필요한 문자에도 16 비트를 사용합니다. 또한 charmap은 UTF-16 코드를 보여줍니다.

Sublime (Windows 텍스트 편집기)은 기본적으로 유니 코드를 UTF-8로 저장합니다.

Windows와 때로는 유니 코드를 사용하며 주로 UTF-8을 사용하고 있습니다.

그리고 Windows는 기술적으로 융통성이 있기 때문에 Linux는 기술적으로 융통성이 있습니다!


답변

Linux는 UTF-8을 사용하며 각 문자는 1-4 바이트가 아닌 1-6 바이트입니다.

U00000000 - U0000007F: 0xxxxxxx
U00000080 - U000007FF: 110xxxxx 10xxxxxx
U00000800 - U0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U00010000 - U001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U00200000 - U03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U04000000 - U7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


답변