❯ touch hello
❯ touch 안녕
❯ touch 안녕ㅎ
❯ gst
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello
"\354\225\210\353\205\225"
"\354\225\210\353\205\225\343\205\216"
nothing added to commit but untracked files present (use "git add" to track
git에서는 보통 다음과 같이 한글이 깨진다. 왜 깨지게 되는걸까?
git config --global core.quotepath false
해결법부터 말하면 다음 quotepath
옵션을 끄면 해결이 된다.
quotepath
https://git-scm.com/docs/git-config
core.quotePath
Commands that output paths (e.g. ls-files, diff), will quote "unusual" characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g. \t for TAB, \n for LF, \\ for backslash) or **bytes with values larger than 0x80 (e.g. octal \302\265 for "micro" in UTF-8)**. **If this variable is set to false, bytes higher than 0x80 are not considered "unusual" any more**. Double-quotes, backslash and control characters are always escaped regardless of the setting of this variable. A simple space character is not considered "unusual". Many commands can output pathnames completely verbatim using the -z option. The default value is true.
❯ ls
he\llo hello 안"녕 안녕 안녕ㅎ
❯ gst
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
"he\\llo"
hello
"\354\225\210\"\353\205\225"
"\354\225\210\353\205\225"
"\354\225\210\353\205\225\343\205\216"
nothing added to commit but untracked files present (use "git add" to track)
https://ko.wikipedia.org/wiki/UTF-8
UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방법.
U+3131 ~ U+CB4C 를 사용하는 한글 유니코드는 3바이트 표현 (1110xxxx
10xxxxxx
10xxxxxx
) 을 사용하게 되고 위에서 언급했던 8진수 0x80
(2진수 10000000
) 보다 크기 때문에 각각 백슬래시가 앞에 붙어서 나오게 됨
안녕이라는 파일이 \354\225... 같이 나옴
안녕을 16진수로 인코딩해보면 '안'은 16진법 'xec'이고 10진수로는 236, 8진수로는 354가 됨. 앞에 깨졌던 것과 동일한 것을 볼 수 있음
https://memory.loc.gov/diglib/codetables/9.3.html
'안' 은 16진법 'C548'에 해당
이진법으로 변환하면 위와 같고, 이 이진값 16자리를 한글에 해당하는 3byte UTF-8 표기인 1110xxxx
10xxxxxx
10xxxxxx
에 x에 맞게 순서대로 넣으면 11101100
10010101
10001000
이렇게 됨
이 이진수는 10진수로 236, 8진수로 354인것을 확인할 수 있다!!