[Mac] sql 파일 한글 깨짐 해결하기

GonnabeAlright·2022년 3월 20일
0
post-thumbnail

mac에서 편집기의 utf-8 설정과 character set 설정을 모두 했음에도 불구하고 sql 파일에서 한글이 깨지는 경우가 있습니다.

문제의 원인은 해당 sql 파일이 utf-8로 인코딩이 되지 않아서 발생하는 것입니다.
해당 sql 파일을 다시 utf-8로 인코딩 해준다면 문제가 해결됩니다 !

하단 방법은 ICONV를 이용한 파일 인코딩입니다.

변환 방법 (euc-kr ➡️ utf-8)

iconv -c -f euc-kr -t utf-8 [euc-kr파일] > [utf-8변환파일]

예시

iconv -c -f euc-kr -t utf-8 original.sql > encode.sql

iconv란 ?

iconv는 파일의 인코딩된 Character-set (이하 문자셋, Charset)을 변환하는 리눅스 유틸리티이다. iconv는 Multi Byte 한국어 인코딩인 EUC-KRCP949, iSO-2022-KR, JOHAB 방식을 모두 지원한다. GNU에서 만든 문자열 변환 유틸리티 및 라이브러리이며 리눅스에는 glibc에 포함되어 있으며 윈도우는 gnuwin32에서 받을 수 있다.

iconv 사용법

iconv -f [현재 파일의 문자셋] -t [변환할 문자셋]

iconv 플래그

  • -c
    입력 파일에서 변환할 수 없는 문자를 출력에서 생략합니다. 변환할 수 없는 문자에는 입력의 FromCode에서 유효하지 않거나 출력의 ToCode에서 대응하는 문자가 없는 문자가 포함됩니다. 변환할 수 없는 문자를 생략한 후 iconv는 입력의 다음 바이트로 진행하여 다음 문자를 변환합니다. -c를 사용하지 않는 경우, iconv는 입력에서 변환할 수 없는 문자가 발견되면 종료합니다. -c의 유무는 iconv의 종료 상태에 영향을 주지 않습니다.
  • -f (FromCode)
    입력 데이터가 인코딩되는 코드 세트를 지정합니다. -f 플래그와 FromCode 매개변수 사이의 공백은 선택사항입니다.
  • -l
    지원되는 모든 FromCode 및 ToCode 값을 표준 출력에 기록합니다.
  • -s
    유효하지 않은 문자와 관련하여 표준 오류에 기록되는 모든 메시지를 억제합니다. -s를 사용하지 않는 경우, 변환할 수 없거나 전달된 각 문자에 대한 오류 메시지가 표준 오류에 기록됩니다. -s의 유무는 iconv의 종료 상태에 영향을 주지 않습니다.
  • -t (ToCode)
    출력 데이터가 변환될 코드 세트를 지정합니다. -t 플래그와 ToCode 매개변수 사이의 공백은 선택사항입니다.
  • FileName
    변환할 파일을 지정합니다.

먼저 인코딩이란 '가'라는 글자를 컴퓨터가 인식할 수 있도록 하는 과정을 말합니다. 그와 반대로 컴퓨터가 '가'라는 문자로 표현하는 방식을 decoding이라 합니다.

EUC-KR과 UTF-8

우선 EUC-KR은 2byte로 한글을 표현한 인코딩 방식입니다.

따라서 '가'에 해당하는 B0A1을 프로그래머용 계산기로 돌려보면 1011 0000 1010 0000으로 인식을 하게 됩니다.

이처럼 컴퓨터는 단순 계산기였지만 점차 발전이 되며 한글이나 영어와 같은 문자 데이터 교환이 가능하게 되었습니다. 문자 교환을 위해 태어난 인코딩 방식이 있는데 바로 ASCII(American Standard Code for Information Interchange)입니다.

ASCII 코드0 ~ 126까지 존재하며 2^7개로 이루어져 있습니다. 각 나라마다의 문자가 달랐기 때문에 해당 ASCII 코드는 나라별로 만들어져 관리가 되었고 나라간의 데이터를 주고 받기 위해 이를 통용하는 '유니코드'가 표준안이 되었습니다. 유니코드의 인코딩 방식에는 크게 세 가지가 있습니다. UTF-8, UTF-16, UTF-32 등 UTF-8 방식은 '가변적'입니다. 한글을 2byte로 고정하는 EUC-KR과는 차이가 있습니다. 또한 유니코드도 각 글자마다 고유의 코드 값을 가집니다. 아래는 한글의 유니코드표 입니다.
f

'가'라는 값은 AC00을 가르키고 있습니다. 코드 포인터(U+)을 붙이면 U+AC00이 됩니다. 즉, AC00 -> 1010 1100 0000 0000 -> 11101010 101100000 10000000 -> EA B0 80으로 변환되어 컴퓨터가 인식하게 되는 과정을 거칩니다. 이 과정을 인코딩이라고 합니다.

0개의 댓글