[ISSUE] 한글포함 파일명 인코딩 판별

adam adam·2022년 9월 14일
0

myIssues

목록 보기
1/2

목표

UTF-8 인코딩 Linux 운영체제에 EUC-KR 인코딩 한글포함 파일과 UTF-8 인코딩 한글포함 파일을 몇 개 만들고 프로그램을 작성하여 각 파일명이 한글을 포함하는지 여부와 포함한다면 인코딩이 UTF-8 또는 EUC-KR 인지 판별하는 프로그램 코딩

+a
유니코드와 UTF-8 그리고 EUC-KR,
리눅스 파일시스템 파일명 인코딩 방식,
자바 코드, 자바스크립트에서 한글 인코딩 방식

접근과 해석

접근과 해석1 : 실습 시스템 환경을 중심으로

실험을 위해 Windows10 과 AWS Linux 2을 실습 시스템 환경으로 설정할 시, Windows에서 Linux로 파일전송을 하더라도 파일이름의 한글이 깨지지 않는다.

Windows 도 NTFS 3.1의 MFT 파일 저장 방식을 이래로, 메타데이터인 파일의 이름의 경우 utf-8가 보장되고, 점진적인 업데이트를 통해 메모장의 내용과 같은 파일 내용 또한 UTF-8이 기본값이다.

물론, 한국 Windows의 인코딩은 경우, 한글의 기계어 전환을 위해 사용되어온 CP949 인코딩 방식이 여전히 핵심적인 부분을 차지 하나, 최소화되간다고 이해가능하다.

이러한 흐름 속에서, 윈도우 사용자가 임의로 인코딩을 변경하여 파일을 리눅스로 서버로 전송한 경우에 대한 해결방안 도출이 우선된다.

이는 리눅스 쉘스크립트 문법한글 인코딩 개념에 대한 이해를 바탕으로 한글 파일 이름에 대해서 특정 명령어들를 실행시키는 것으로 귀결된다.

하지만 이러한 해결책은 이전 사례들을 포괄하지 못한다.

접근과 해석2 : 근본 시스템 환경을 중심으로

'리눅스 한글 깨짐'으로 구글링하면, Windows and Linux 통신 간에 파일 이름의 한글이 깨지는 현상이 있다.

현재 나의 개발환경에서는 재현불가능한 에러이다. 하지만, 기존 시스템은 내가 결정하는 게 아니다. 주어지는 것이다. 그러므로 이러한 사례들을 포괄할 수 있는 접근과 해결책 도출이 타당하다.

해결책1 : Linux 상에서의 조회와 인코딩 변경

깨진 파일명에 대해서는 cat, rm 등의 명령어가 작동하지 않는다.
자연스럽게 리눅스 상에서 할수있는 건 매우 제한된다. 그래도 파이썬 스크립트를 통해서 이런저런 시도를 해볼 수 있을 것으로 생각되나,

이러면 인코딩, 파일시스템, 자바와 자바스크립트 인코딩 개념들과이 근본적인 부분으로 다다르지 못한다.

해결책2 : Windows 에서의 전처리

기존 윈도우에서 보낼때부터 utf-8 인코딩을 확실히 보장하여 보내는 것이다.

물론, 윈도우 파일 시스템의 문서와 UTF-8로의 점진적인 업데이트에 의하면, 충분히 UTF-8이 보장된 상태로 선뜻 이해할 수 있다.

하지만, 문서와 달리, 현실 속에서는 EUC-KR 인코딩 회귀, 쉘 명령어 버전과 호환성의 문제, 윈도우 운영체제 크랙 버전 사용 시 업데이트 불가 문제 등 비정량적인 요소들이 인코딩 문제에 개입한다. 이에 따라 윈도우 운영체제 상에서의 UTF-8 인코딩은 생각보다 현저히 낮게 보장된다.

이에 따라, 윈도우 운영체제만이라도 UTF-8 인코딩을 확실히 보장해주는 해결책이 필요하다.

=> cp 65001, 아윤 노션 적극 참고

배운 점

  • bash shell의 명령어 유틸리티의 버그들을 아윤 자료가 없었으면 인지도 못했음, 근본적인 지식이 문제 해결에 필수적인 경우를 습득

  • 인터넷 자료는 실용적으로 당장의 문제를 해결할지도 모르지만, 가령 인코딩 에러 시 EUC-KR로 인코딩을 역행, 잠시 문제를 미룰뿐임

  • 혼자 했으면, 이상함을 느끼기까지 못해도 2주는 걸렸을 것 같지만, 다른 관점의 자료덕에 한번에 느낌, 내 일 해준 느낌 감사

관련

Win-to-Linux 접근 수단들

파일 이름에 한글이 있을 때 깨지는 사례1

추가 : 컴파일과 인코딩

java 파일의 인코딩은 운영체제가 파일을 저장할때, 운영체제에 설정된 기본 인코딩으로 저장된다.

가령, 메모장의 기본 인코딩이 UTF-8인 Windows10의 경우, 메모장으로 Hello.java 파일 생성 및 저장 시, UTF-8로 저장되고, UTF-8로 조회해야 깨지지 않는다.

다만, 메모장의 기본 인코딩이 UTF-8인 Windows10이여도 cmd나 powershell 등 쉘의 인코딩은 cp949이다. 같은 운영체제에서 메모장은 UTF-8, 쉘의 인코딩은 cp949로 서로 다르다. (cp949, UTF-8의 혼용)


(나.txt 는 사전에 UTF-8로 인코딩된 파일이다.)

환장하겠는건, 내 윈도우 노트북에서 cmd는 chcp 65001이 바로되는데, powershell은 안된다. 맥북 사야겠다.

컴파일러의 인코딩은 운영체제 따라서.

JAVA 컴파일러의 인코딩 방식도 운영체제에 따라 기본값이 변동하는 것으로 보인다.,Windows is cp949, Linux is UTF-8,

동일한 자바파일을 윈도우상에서 컴파일 시도할때, UTF-8로 저장된 자바 파일임에도, cp949로 조회하여 컴파일에 실패한다. 하지만, 동일한 파일을 리눅스로 전송하면 별도의 문제없이 조회하여 컴파일된다.(컴파일러 버전은 동일)

javascript 파일의 인코딩 또한 js파일 저장 시 편집기의 인코딩 설정대로 파일이 기계어로 저장되고, 이와같은 인코딩을 선택한 쉘이나 편집기로 보냐에 따라 파일이 제대로 읽힌다.(UTF-8은 UTF-8, cp949는 cp949로)

다만, node의 자바스크립트 엔진을 사용한다면, 윈도우에서든, 리눅스에서든 운영체제와 별개로 컴파일 시 한글 깨짐 현상은 없다.

0개의 댓글