[error]git log 한글 깨짐현상

ddwwmm_1·2022년 12월 18일

우선 나의 경우 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개의 댓글