누구든지 이 인코딩 관련 동작을 설명할 수 있습니까?

누구든지 이 인코딩 관련 동작을 설명할 수 있습니까?

꽤 많이 읽었음에도 불구하고 인코딩은 나의 장점이 아닙니다.

편집하고 싶은 파일이 있는데, 확장자는 .tdl인데, 딱히 의미는 없습니다.

XML 파일입니다. 첫 번째 줄은 다음과 같습니다.

<?xml version="1.0" encoding="utf-16"?>

gedit로 이 파일을 열려고 하면 노란색 배경에 다음과 같은 큰 메시지가 나타납니다.

"파일을 여는 중 문제가 발생했습니다... 연 파일에 잘못된 문자가 있습니다. 이 파일을 계속 편집하면 이 문서가 손상될 수 있습니다. 다른 문자 인코딩을 선택하고 다시 시도할 수도 있습니다."

이 아래의 문자 인코딩 드롭다운 상자에는 "현재 로케일(UTF-8)"이 표시됩니다.

이를 "유니코드(UTF-16)"로 설정하고 "다시 시도"를 클릭합니다. 불쾌한 메시지가 다시 나타나고 드롭다운이 "현재 로캘(UTF-8)"로 다시 설정됩니다.

또한 파일 -> 열기 -> 문자 인코딩으로 이동하여 파일을 열어 보았습니다. "자동 감지"에서 "유니코드(UTF-16)"로 변경했습니다. 하지만 드롭다운이 "현재 로케일(UTF-8)"로 설정된 상태에서 불쾌한 메시지가 다시 나타납니다.

프로그래밍 방식으로(Groovy를 사용하여 groovy.xml.XMLParser) 이 파일을 구문 분석하고 겉보기에 유효한 구조를 생성할 수 있습니다 groovy.util.Node. 수정 여부에 관계없이 이 내부 노드 구조를 저장하려는 단계에는 아직 도달하지 않았습니다.

누군가 이 파일에 어떤 문제가 있는지(있는 경우), 안전하게 편집할 수 있는 방법을 말해 줄 수 있습니까?

답변1

UTF-16에서 문자는 2바이트이고 ASCII 문자의 경우 상위 바이트는 0x00입니다.

예를 들어 UTF-16의 "Something"은 다음과 같습니다.

00000000  ff fe 53 00 6f 00 6d 00  65 00 74 00 68 00 69 00  |..S.o.m.e.t.h.i.|
00000010  6e 00 67 00 0a 00                                 |n.g...|

( OxFFFE시작 부분은 바이트 순서 표시입니다. 0xFEFF가 표시되면 바이트를 교환해야 한다는 것을 알 수 있습니다...).

여기저기서 NUL 문자가 소프트웨어를 혼란스럽게 합니다...

다음을 사용하여 보다 합리적인 UTF-8로 변환할 수 있습니다 iconv.

iconv -f UTF-16 -t UTF-8 <utf16file >utf8file

그리고 파일 헤더의 인코딩을 변경하는 것을 잊지 마세요.

답변2

파일이 UTF-16(Windows 일반 인코딩)인 경우 Linux(UTF-8 기본, 전투적...)에서는 문제가 발생합니다. 적어도 GNU emacs는 UTF-16을 지원한다고 말하고 분노에 찬 적이 없습니다.

recode(1)를 사용하여 UTF-8로 변환하고 일치하도록 헤더 등을 수정하려고 시도할 수 있지만 이로 인해 UTF-16을 기대하는 도구가 심각하게 손상될 수 있습니다.

업데이트:이것에 대해 생각해 보십시오. UTF-8로 다시 코딩하십시오. 여가 시간에는 엉망이 되고, 스핀들이고, 훼손됩니다. UTF-16으로 다시 코딩하세요. 이렇게 하면 중간에 익숙한 도구를 사용할 수 있습니다. 하지만하다도구가 혼동되는지 알 수 있는 UTF-16 인코딩을 수정합니다. 아니면 XML 맹글링 도구가 이에 주의를 기울일 수도 있습니다...

관련 정보