[error]git log 한글 깨짐현상

ddwwmm_1·2022년 12월 18일
0

우선 나의 경우 vscode를 메인 에디터로 사용하고 있으며 CLI 또한 iterm2 보다 vscode 하단의 터미널을 자주 애용한다.

문제는 vscode의 터미널을 사용해 git log로 지난 커밋들을 확인할때 한글이 깨지는 현상이 발생한다는 것이다...

영문의 경우 잘 나오지만 한글의 경우 깨짐현상이 나타난다.

하지만 iterm2 에서는 깨짐현상이 나타나지 않는것을 확인할 수 있었다.

iterm2에서는 잘 나오는데,,, 이상하게 vscode 에서만 말썽이다. 왜 그럴까,,😑

생각보다 문제는 가까운데 있음을 알수 있었다.
바로 위의 iterm2 의 경우 상단 탭에 LANG=en_GB git log 이라 나와있는데
이는 내가 일전에 alias 를 통해 git 을 실행할때 로케일(locale) 값을 영문으로 설정해준 것이다.
과거의 내가 이렇게 발목을 잡는다...
당시 기억으론 git 을 사용할때 에러 로그들이 한글로 나와 git 커맨드 한정으로 로케일 값을 en_GB로 주었던 것 같다.


즉, git 의 커맨드가 실행될때 마다 실제로는 $ LANG=en_GB git * 의 형태로 실행되고 있었던 것이다.

여기서 로케일 값의 형식에 대해 이해한 것을 바탕으로 간략하게 요약하면
language[_territory][.codeset][@modifier] 의 형식을 따르며
en_GB 는 en(영어), _GB(영국) 그리고 .다음에 위치하는 코드셋은 빠져 있는 형태다.

그렇다면 왜 vscode 에서만 말썽인걸까?
둘다 git커맨드를 사용하면 로케일의 LANG값을 en_GB로 설정하는건 동일하지 않나?

그래서 두 환경에서 실제 $ locale 커맨드를 사용하여 로케일 설정값을 확인해보았다.


(vscode)


(iterm2)

두 환경에서 로케일 설정값에 차이가 있다.

아마 두 환경에서 환경변수에 차이가 있는것 같아 $ env 를 통해locale 관련 환경변수들을 살펴 보았으며
vscode 에서는 LANG=en_US.UTF-8, iterm2 에서는 LC_CTYPE=UTF-8 로케일 설정 관련 환경변수가 있었다.

여기서
LANGLC_ALL 의 경우 전역에서의 로케일 설정값을 의미한다.
하지만 LC_ALL의 경우 우선순위가 가장 높으며 다른 LC_*의 값들을 LC_ALL로 덮어쓴다.
LANG 의 경우는 LC_*의 값들을 설정하지 않았을때 적용되는 기본값이며 만약 LC_TIME가 설정된 경우
해당 값을 제외하고 설정이 없는 나머지LC_* 들을 LANG으로 설정한다.
LANG 의 경우 우선순위가 가장 낮다.

정리하면 두 환경에서 git 커맨드 실행시 동일하게 LANG 의 값으로 en_GB 가 설정되지만, iterm의 경우 LC_CTYPEUTF-8 로 설정 되어 있어 해당 값은 유효하다.
하지만 vscode의 경우 LC_CTYPE 마저 en_GB 로 설정되어 문자셋, 인코딩 방식이 달라지게 된다.

LC_CTYPE : 문자 분류(알파벳, 숫자, 한글 또는 소문자, 대문자 등등), 변환,
대소문자 비교을 위한 로케일 설정을 의미한다. 이것은 예를 들어 fgetwc(), is(),
isw
(), mblen(), mbtowc(), wcstombs() 등의 함수에 영향을 줄 수 있다.

그렇다면 로케일 값으로 코드셋을 정의 해주면 해결되는 문제 아닌가??
정말 코드셋을 UTF-8로 정의해 주었더니 한글이 깨짐 없이 잘 나오는것을 확인할 수 있었다.

$ vi ~/.zshrc

# en_GB 에서 코드셋을 추가해 en_GB.UTF-8로 수정
alias git="LANG=en_GB.UTF-8 git"


# 편집하고 저장한 뒤, source ~/.zshrc 로 해당 환경변수 다시 읽기
git log

이제 vscode의 터미널에서도 한글이 깨짐없이 잘 나온다.
오랬동안 고통받던것이 해결되어 기쁘지만 한편으로는 해당 로케일에 대해 완벽히 이해를 했다고 보기 힘들기에
앞으로 좀더 알아볼 예정이다!

참고 자료

http://coffeenix.net/doc/misc/locale.html
https://www.44bits.io/ko/keyword/locale
https://velog.io/@dpdnjs402/lk5b90sq

0개의 댓글