본문 바로가기

Tech/Linux

[Linux] 리눅스 locale 설정

반응형

리눅스 기반의 OS 에서 개발을 진행하다 보면 한글의 인코딩 문제로 에러가 나는 경우가 있다. 파이썬으로 개발을 하던 도중 한글명의 파일을 다룰 때 ascii encoding 과 관련된 에러가 발생했다. 파이썬의 encoding 설정을 확인하기 위해서 sys 모듈의 메서드를 확인했는데, getdefaultencoding() 을 호출하는 경우 utf8 로 설정되어 있지만 getfilesystemencoding() 을 호출하는 경우 ascii 로 되어있는 것을 확인하였다. 이로 인해서 filesystem encoding 설정을 바꾸는 방법을 찾아보았다.

1. locale

locale 은 리눅스 명령어이자 사전적으로 장소, 지역 등을 의미한다. 지역에 따라서 해당 코드의 세트, 날짜 및 시간 형식 지정 규약, 통화 규약, 십진수 형식 지정 규약, 정렬 순서 등등이 달라질 수 있기 때문에 OS 에서는 이와 관련된 환경변수를 통해서 해당 locale 에서의 표현 형식을 지정한다.

2. locale 형식

locale 은 일반적으로 다음의 형식을 따른다.

 

language[_territory][.codeset][@modifier]

 

각 언어와 이를 처리하는 인코딩 코드셋에 따라서 locale 값이 지정되는데 대표적으로는 'en_US.UTF-8'. 'ko_KR.UTF-8' 등이 있다. 'en_US.UTF-8' 은 영어, 미국, UTF-8 인코딩을 의미하고, 'ko_KR.UTF-8' 은 한글, 한국, UTF-8 을 의미한다. 이외에도 POSIX C, C.UTF-8 과 같은 로케일이 리눅스 기본값으로 지정되어 있는 경우도 있다.

3. locale 명령어

터미널에서 locale 명령어를 치면 locale 과 관련된 환경 변수의 값들을 확인할 수 있다.

 

LANG="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_CTYPE="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_ALL=

 

위의 설정은 모두 한글과 UTF-8 인코딩을 따르도록 설정되어 있다.

각 설정들의 설명은 다음과 같다.

 

환경변수명 설명
LC_ALL 전역 로케일 설정의 값이다. 우선순위가 가장 높다.
LANG 전역 로케일 설정값이다. 우선순위가 가장 낮은 값으로, 다른 값이 설정되어 있지 않을 때만 적용된다.
LC_MESSAGES 메시지를 표시하는 기준이 되는 로케일을 지정한다.
LC_CTYPE 문자 분류, 글자수, 대소문자 구분 등의 기준이 되는 로케일을 지정한다.
LC_NUMERIC 숫자와 관련된 기준이 되는 로케일을 지정한다.
LC_MONETARY 통화나 금액과 관련된 숫자의 기준이 되는 로케일을 지정한다.
LC_TIME 날짜, 시간과 관련된 로케일을 지정한다.
LC_COLLATE 문자열의 정렬 순서를 결정하는 로케일을 지정한다.

 

이외에도 시스템에 따라 LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION 등 추가적인 환경변수들도 있다.

 

locale 명령어에 -a 옵션을 주게되면 현재 시스템에서 사용가능한 모든 로케일을 확인할 수 있다.

 

$ locale -a
en_NZ
nl_NL.UTF-8
pt_BR.UTF-8
fr_CH.ISO8859-15
eu_ES.ISO8859-15
en_US.US-ASCII
...

 

4. locale 환경변수의 우선순위

locale 환경변수로 설정을 하는 경우 우선순위에 따라서 값이 적용된다.

가장 우선순위가 높은 값은 LC_ALL 이고 제일 우선순위가 낮은 값은 LANG 이다. 그리고 둘 사이에 나머지 카테고리들이 위치한다. 그렇기 때문에 LANG 을 지정하더라도 LC_ALL 이 다른 값으로 지정되어 있는 경우에는 LC_ALL 에 지정된 값을 기준으로 동작하게 된다.

[reference]

- https://redjacob.tistory.com/17

 

locale 관련 환경변수 - LC_ALL, LANG

locale은 사전적으로 장소, 지역이라는 뜻인데, 지역에 따라 해당 코드 세트, 날짜 및 시간 형식 지정 규약, 통화 규약, 십진수 형식 지정 규약, 조합(정렬) 순서(이런 것들을 category라고 함)가 달라

redjacob.tistory.com

- https://www.44bits.io/ko/keyword/locale

 

반응형

'Tech > Linux' 카테고리의 다른 글

[Linux] 사용자 권한 (sudo, sudoers, chmod, chown)  (2) 2023.11.28
[Linux] 사용자 계정 생성 (adduser, useradd)  (1) 2023.11.26
[Linux] df  (0) 2022.06.06
[Linux] PID, PPID  (0) 2022.01.08
[Linux] scp (secure copy)  (0) 2021.10.16