리눅스 캐릭터셋, 유니코드, utf8, 한글, 아... 정말 못찾겠습니
안녕하세요...
여기저기 돌아다녔는데 유니코드에 대한 원론적인 이야기가
대부분이고 캐릭터셋에 대한 글도 저의 경우를 찾지 못해서
염치 불구하고 질문 올립니다.
이번에 웹 솔루션의 다국어 버전(스페인어-칠레)을 만들면서
모든 소스 파일을 utf8로 바꿨는데, LAMP 환경이거든요.
근데 다른건 다 잘 되는데 궁금한게 있습니다.
리눅스에서 파일을 생성할 경우,
그러니까 드림위버에서 유니코드(UTF-8)로 저장해서 올리는게
아닌 리눅스 웹 서버에서 직접 vi 를 이용해서 파일을 생성할
경우의 기본 캐릭터셋을 바꾸고 싶은데 도대체 어찌해야 할지...
$ vi /etc/sysconfig/i18n
LANG="ko_KR.utf8"
SUPPORTED="ko_KR.utf8:ko_KR:ko"
SYSFONT="lat0-sun16"
일단 현재 상태는 이렇구요, 만약 SecureCRT를 이용해서 접속한 다음
한글을 포함한(한글은깨짐) 텍스트를 저장하면 유니코드로 저장이 되긴 합니다.
영어만 입력했을 경우엔 그냥 디폴트로 한국어(드림위버에서 인식하는 인코딩)로
저장이 되는것 같구요.
처음에 eucKR 인가 이걸로 되어있어서 이것저것 해봤지만 안되더군요.
$ locale
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=
locale 은 UTF-8 이나 utf8 이나 둘 다 안되더라구요...
지금 서버로 사용중인 리눅스는 레드햇 엔터프라이즈(2.4) ES 인가...
개발이야 물론 윈도에서 개발해서 유니코드로 저장한 뒤 서버에 올리긴 하지만
서버에서 자동으로 생성되는 파일이나 네트워크를 통해 전송된 내용을
파일로 생성하는 부분이 있는데 이 부분에서 인코딩이 utf8로 저장되지 않아서
글자가 깨지는 현상이 있습니다.
그래서요... ㅠ.ㅠ
구체적이지 않더라도 어떤 가능성이 있는 방안이라도 알려주세요...
슬프네요... 아구 목이야... ㅠ.ㅠ
첫번째 기본 locale을 바꾸는 방법은 다음과 같습니다.일단 사용할
첫번째 기본 locale을 바꾸는 방법은 다음과 같습니다.
일단 사용할 수 있는 locale은 /usr/share/locale에서 확인할 수가 있습니다.
위 디렉토리에서 locale.alias 파일을 참조하시면 되겠구요.
원하는 나라의 locale을 사용하면 되겠죠.
그런데 locale만 바꾸면 vi로 작업이 안될겁니다. 그에 맞는 입력기도 선택해 주어야
할테니까요.
저는 다른 나라언어로 작업을 안해봐서 잘 모르겠네요.
특히나 MS-Windows에서 동작하는 SecureCRT가 한글도 표현하지 못하는데
다른나라 언어가 표현되는지도 의문이네요. 만일 한글도 표현하지 못한다면 입력
자체가 안되는데 vi작업한다는 것도 어패가 있어보입니다.
두번째 파일이 생성된 이후에 iconv등을 이용해보세요. 원하는 codeset으로 변경해
주는 명령어입니다.
즉, 파일을 자동생성 할때 C언어를 사용한다면 iconv()함수를 한번 거치게하시고
web script언어를 사용한다면 해당 script 내에 포함되어있는 iconv를 이용해서
원하는 국가의 codeset으로 변경할 수가 있습니다.
------------------------------
좋은 하루 되세요.
[code:1]aqua@unfix ~ $ env|grep LCLC_A
전 저정도 세팅으로 거의 문제없이 사용중입니다 :)
secureCRT 는 안써서 모르겠지만 putty 를 사용해서 encoding 을 utf-8 로 맞추고 글꼴을 Gulim 으로 맞추면 아무 문제가 없네요...
이것도 참고해보면 좋을 듯 싶군요
http://bbs.kldp.org/viewtopic.php?t=46594&highlight=fileencodings
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
내가 여기에도 올렸었군요.-_-;wiki 에만 저장하면 현행유지가 좀
내가 여기에도 올렸었군요.-_-;
wiki 에만 저장하면 현행유지가 좀 쉽겠는데, 젠투 위키 난장중이라...
이 글 보고 살짝 현행화 시켜봤습니다. :oops:
https://xenosi.de/
답변 감사합니다. 그런데...
코드뱅크님, 정태영님, 송효진님 답변 감사드립니다.
제 질문이 좀 이상했죠? utf-8 형식의 파일을 어떻게 만드느냐는게
요지였는데 결국 글을 쓰다보니 헛소리가... ㅋㅋㅋㅋ
iconv 경우에는 파이썬으로 돌려보긴 했는데 파일이 깨지더라구요.
어쩌구 저쩌구 해서 그걸 안써도 되는 상황이 되었답니당^^
시간내셔서 해주신 답변에도 불구하고 워낙 알아듣질 못해먹어서...
정태영님, 설정을 올려주셔서 정말 감사합니다. 그런데 제가 워낙 무식해서
$ env 커맨드를 입력해봤지만 LC_ALL 부분이 없더라고요.
$ locale 이렇게 해도 LC_ALL 은 설정이 안되어 있더라고요.
$ env | grep LC
$ env | grep LANG
LANG=ko_KR.utf8
음... 제가 알고 싶은건, 예를 들어
$ cat > temp.php
[Ctrl + Z]
이렇게 했을때 temp.php 파일을 utf-8 형식으로 저장하고 싶은 그런...
cat이나 vi나 empty 파일을 저장할때 utf-8로 저장이 되어야 한다는...
다시 한번 부탁을... 드려봅니다...
[url]http://www.gentoo.or.kr/wiki/moin.c
http://www.gentoo.or.kr/wiki/moin.cgi/GnomeLocale
여기의 /etc/profile 부분을 밑에 붙여보세요.
위키가 초토화 되었으면 오른쪽 위의 파란i 를 눌러서 과거상태를 보시면 됩니다.
PuTTy 에서 창->변환->UTF-8
https://xenosi.de/
이런...
역시나 안되는군요. 그곳에 있는 스크립트도 해보고
여러가지를 보고 해봤지만 저의 무지함만 깨달았을 뿐이네요.
큰일이네... ㅠ.ㅠ
여러분 모두 답변해 주셔서 감사합니다.
좋은 하루 되세요!!
Re: 리눅스 캐릭터셋, 유니코드, utf8, 한글, 아... 정말 못찾겠
빈 파일은... 인코딩이 없습니다. 글자가 하나라도 들어가야 ;; 인코딩이 존재할 수 있는 것 아닌가요? 아마 cat 으로 빈파일을 만들면 0 바이트일텐데, 당연히 이 파일은 인코딩이라는 개념 자체가 없게 됩니다. 정확하게 말하면 붙이기 나름이겠죠. utf-8도 될 수 있고, euc-kr 도 될 수 있고, 하다 못해 KOI-8 같은 것도 될 수 있지 않을까요? ;;
vim 같은 경우에는 set fileencoding='utf-8' 로 하고 저장하면 될 거 같은 이 경우에도 빈 파일은 인코딩 없기 매한가지 입니다. ;;
파일 이름 인코딩이라면 이야기가 달라지겠지만요. 파일 자체를 서버에서 생성 하면 한글이 깨진다고 하셨는데.. 이 경우는 서버에서 파일 생성할 때 인코딩을 신경 잘 써줘야 될 것 같네요. 파일 생성할 때 항상 utf-8 로 쓰고 있는지 확인해 보시기 바랍니다 ^^
[quote="maxnim"]한글을 포함한(한글은깨짐) 텍스트를 저장하면
화면에서도 안깨집니다.
텔넷 클라이언트 에서도 인코딩을 맞추세요...
https://xenosi.de/
그렇다면...
<?
// 파일을 생성하는 예제
echo("start<br>");
exec("rm -f ./test.php");
touch("./test.php");
chmod("./test.php", 0777);
$handle = fopen("./test.php", "w");
fwrite($handle, "hello\n".mktime());
fclose($handle);
echo("finish<br>");
?>
이렇게 해서 test.php 파일을 생성한다면,
리눅스의 인코딩 설정이 제대로 되어있다면,
파일은 UTF-8 인코딩으로 저장이 된다는 말씀이지요????
송효진님 감사합니다.
요 며칠동안 인코딩에 대해서 많이 알게 되네요... 에휴...
누군가... 리누스가 좀 도와줬으면... 어디간겨???[
썩 잘쓴 글을 아닙니다만 참고해보세요.[url]http://bbs.k
썩 잘쓴 글을 아닙니다만 참고해보세요.
http://bbs.kldp.org/viewtopic.php?t=59688
이 타래 밑에 링크 걸어주신 분 글이 더 좋은데,
일단 간단히 정리된거부터...
-----
hello 만 적어놓으면 UTF-8 이던 말던 상관없죠.
https://xenosi.de/
계속 감사하고 있습니다.
진숙의 유니코드 사이트가 아깐 접속이 안되더니 송효진님 답글을 읽으니깐 잘 되는군요... 트리거인가... ㅡㅡㅋ
좋은 글 감사합니다. 간단하게 개념잡고 자세한 내용을 보니
도움이 많이 되는군요.
http://kldp.org/Translations/html/UTF8-Unicode-KLDP/UTF8-Unicode-KLDP.html
요 링크를 발견했는데 여기도 한번 가봐야겠네요.
정말 감사합니다.
캐릭터셋: 문자집합. - 영문은 그냥 ASCII코드라고 하고 -
캐릭터셋: 문자집합.
- 영문은 그냥 ASCII코드라고 하고
- 한글은 KS X 1001 문자집합이라고 합니다.
위 두 문자집합을 하나의 파일에 쓸 때 필요한 것이 인코딩입니다. 두 문자셋은 실제로 충돌하기 때문에, 한글 문자셋에 대해서 상위 8bit를 1로 해서 ASCII문자셋과 같이 쓰게 되는데, 이런 인코딩을 가리켜 EUC-KR인코딩이라고 합니다.
EUC-KR은 매우 단순한 인코딩인거죠. (8bit를 떼거나 붙이면 인코딩 디코딩이 되므로)
(인코딩이 이렇게 단순할 수 있는 이유는, 7bit문자셋및 인코딩을 고려해서 중간이 *비어있는* 문자셋을 설계해서 만들었기 때문입니다.)
그러나 EUC-KR도 다른 문자셋과 함께 섞어 쓸 수 없습니다. 예를 들어 일본어 문자셋과 같이 섞어 쓸 수 없죠. 충돌하는 문자셋 영역이 있습니다.
(예를 들자면, 박스문자와 한글문자셋이 충돌해서 박스문자가 이상한 한글로 나오는 식으로)
이걸 해결하기 위해 모든 문자셋을 7bit로 인코딩하는 방식이 사용되었죠.
unicode는 인코딩을 전혀 고려하지 않고 단순 무식하게 중간이 비어있는 규칙따위는 전혀 없는 문자셋으로 전 세계 문자를 모두 때려 넣는 문자셋입니다.
따라서, 예전처럼 인코딩까지 고려된 문자셋이 아니기 때문에 이를 실제로 써먹기 위해서는 특별한 인코딩방식이 필요하게 되었고, ASCII문자셋과 충돌하지 않는 가장 인기있는 인코딩방식인 UTF-8이 유니코드 인코딩방식으로 많이 쓰이게 되었습니다.
여기까지 쉽게 쓰느라 다소 정확하지 않은 내용이지만 대충 이렇게 생각하시면 쉽습니다.
정말정말정말 감사합니다!!!!
드디어 UTF-8 인코딩으로 파일 저장하는데에 성공했습니다.
영어가 아닌 비영어권 문자를 입력하면 저장도 잘되고
드림위버에서 불러와도 UTF-8 인코딩에 문자가 깨지지 않는군요.
이번에 맨땅에 헤딩을 좀 했지만 유니코드와 UTF-8 설정에
대해 알게 되어서 기분이 좋군요^^
어휴... 벌써 9시 38분이네요.. 퇴근해야징!!
다음에는 좀 알고 질문드릴께요^^;
그럼 모두 좋은 하루 되세요~ 감사합니당!!!
아 드림위버.<meta http-equiv="Content-Ty
아 드림위버.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
무조건 파일 상단에 이걸 넣으세요.
include 해서 겹치더라도 파일마다 넣으세요.
인코딩 검출이 완전한 소프트는 존재하지 않습니다.
이미 깨져 나오는거면 저장하지 않은 상태에서 ^J 를 눌러서 인코딩 메뉴로 가서 바꾼 후 다시 불러오기 하면 됩니다.
https://xenosi.de/
댓글 달기