갑자기 궁금해져서요;;;
전에 명령어로 확인할 수 있는것 같았는데 기억이 전무하네요;;;
어떤 파일이 utf8로 작성되었는지 euckr로 작성되었는지 확인하는 명령어나 다른 방법아시는분;;
공부삼아 ^^;;;
file 명령이 어떤 건 utf-8이라고 나타내주던데...
모든 utf-8 문서를 utf-8이라고 나타내주진 않더군요.
그래서 원하는 용도로는 사용이 안 될 것 같습니다.
-- academic은 제 고등학교 때 동아리 이름입니다. academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
---- academic은 제 고등학교 때 동아리 이름입니다. academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
뭐 euc쪽은 그렇지만 utf-8이라면 첫3바이트로 구분할수 있지 않을까요?
------------------------- 내 악마를 영혼에게 팔아넘기다
혹시 BOM을 말씀하시는 거라면, utf-8은 BOM이 있는 경우도 있고 없는 경우도 있습니다. 게다가 저만 그런건진 모르겠지만 BOM이 달린 utf-8문서는 본적이 없네요...
BOM은 utf16, utf32일때만 해당됩니다. utf8은 해당사항 없습니다.
Written By the Black Knight of Destruction
MS 윈도우에서는 많이 볼 수 있습니다.
메모장에서 작성하면 BOM이 달리는 걸로 알고 있습니다.
먼저 아래 명령어로 utf-8 인코딩인지 먼저 검사합니다.
# iconv -f utf-8 -t ucs4 textfile.txt > /dev/null 2>&1 # echo $?
# iconv -f cp949 -t ucs4 textfile.txt > /dev/null 2>&1 # echo $?
검사순서는 텍스트가 0x20부터 0x7f까지의 아스키로만 된 경우 utf-8로 판단하기 위함이구요... 필요하면 바꿔도 되죠.
참고로 바이트 모양이 같으면 cp949문서가 utf-8로도 판단될 수 있습니다. 이경우 텍스트가 깨졌는지 눈으로 보고 판단을 해야겠죠....
용량이 크거나 파일이 많다면 특정부분만 짤라서 iconv 하시는게 좋을 듯합니다.
저도 귀찮아서 매번 그냥 스크립트로 UTF-8, EUC-KR, ASCII, EUC-JP ..등으로 iconv 하는데 은근히 시간걸리네요.
좀 화끈(?)한 방법이 있으면 좋으련만...
OTL
Hello World.
head가 출동하면 어떨까요?
head textfile.txt | iconv -f utf-8 -t ucs4 /dev/stdin >/dev/null 2>&1 echo $?
euc-kr 에 대해서만 php 로 체크를 할 수 있도록 만들어 놓은 것이 있습니다. 다른 문자셋에 대해서는 고려를 하지 않은 관계로 .. 제 트랙백 처리에 사용을 하고 있습니다.
http://my.oops.org/62 참조 :-)
답변들 고맙습니다. ㅎㅎ
제가 알고있던게 file인듯 싶네요... ;; 설마했지만.. 예전엔 다 되는듯 했는데 다 되는게 아니었나 봐요 ^^; 귀찮지만.. 일일이 확인하는 수밖엔;;
------------------------------------------------------------------------------------------- 생각은 지나가던 개새끼도 하지.. 실천하는건?? 나도 할수있지...http://mrdics.tistory.com
------------------------------------------------------------------------------------------- 이놈의 IT 생활... 실증나고 짜증나고... 근데 왜 맨날 it관련 소식만 보고 ;;; 님휘
mozilla 에서 나온 chardet 를 사용하는 방법도 있습니다. (c++)
이를 python 으로 포팅한 게 아래 녀석이구요.http://chardet.feedparser.org/
찾아보시면 java 버젼도 있습니다.
-- 오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~ 나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
완벽하게 구별하는 방법은 없고,
직접 구현하고자 하신다면 개별 문자들이 euckr이나 utf8로 해석되었을 경우 한글 영역 등에 맞는 경우가 발생하는 빈도를 가지고 판단을 해야 합니다. 좀 인공지능적인 개념이 들어가야죠.
IBM의 ICU에서도 mozilla의 chardet과 같은 역할을 하는게 있습니다.
http://www.icu-project.org/
윗분들이 말씀하셨다시피 UTF-8이든 EUC-KR이든 바이트열 포맷의 일종이고, 같은 바이트열에 대해 두 문자셋에서 모두 적법할 수 있습니다. 대개 그래서 적법성을 판단하기 보다는 Mozilla의 chardet처럼 해당 문자셋에서 통계적으로 잦은 조합들을 가지고(이를테면 EUC-KR은 한국어를 위해 많이 사용되므로, 한국어 문장에서 잦은 패턴들이 그대로 반영되겠죠) 패턴을 확인하는 식으로 추측합니다.
2년여를 기다려도 icu 의 chardet 도 PHP 에서는 지원하지 않네요. 기다리다 지쳐서 mod_chardet 확장을 만들어 버렸습니다. ICU / Universal chardet(Mozilla) 둘다 지원합니다.
자세한 내용은 http://my.oops.org/126 을 참조하세요.
함수 크기를 좀 줄였으면, 하는데...줄일 수 있으시면, 줄여 주시면 감사하겠습니다.
//UTF8조건을 만족하는 2바이트 이상의 문자가 5개 이상 나오면, UTF8로 판단함. int is_UTF8(char *s) { int bUTF8=1;unsigned int a;unsigned char *p; p=(unsigned char *)s; while(*p) { a=*p; if(a&0x80) { if((a&0xE0)==0xC0) { a=p[1]; if((a&0xC0)==0x80) { bUTF8++;//UTF8일것이다. if(bUTF8>5) { break;//UTF8 } p+=2; } else { bUTF8=0; break;//UTF8이 아님 } } else if((a&0xF0)==0xE0) { a=p[1]; if((a&0xC0)==0x80) { a=p[2]; if((a&0xC0)==0x80) { bUTF8++;//UTF8일것이다. if(bUTF8>5) { break;//UTF8 } p+=3; } else { bUTF8=0; break;//UTF8이 아님 } } else { bUTF8=0; break;//UTF8이 아님 } } else if((a&0xF8)==0xF0) { a=p[1]; if((a&0xC0)==0x80) { a=p[2]; if((a&0xC0)==0x80) { a=p[3]; if((a&0xC0)==0x80) { bUTF8++;//UTF8일것이다. if(bUTF8>5) { break;//UTF8 } p+=4; } else { bUTF8=0; break;//UTF8이 아님 } } else { bUTF8=0; break;//UTF8이 아님 } } else { bUTF8=0; break;//UTF8이 아님 } } else { bUTF8=0; break;//UTF8이 아님 } } else { p++;//ascii } } return bUTF8; }
glib (LGPLv2)http://code.metager.de/source/xref/freedesktop/pkg-config/glib/glib/gutf8.c#fast_validate_len
android (Apache 2.0)https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/media/jni/android_media_MediaScanner.cpp#61
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
file 명령으로 어떤 건
file 명령이 어떤 건 utf-8이라고 나타내주던데...
모든 utf-8 문서를 utf-8이라고 나타내주진 않더군요.
그래서 원하는 용도로는 사용이 안 될 것 같습니다.
--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
뭐 euc쪽은
뭐 euc쪽은 그렇지만
utf-8이라면 첫3바이트로 구분할수 있지 않을까요?
-------------------------
내 악마를 영혼에게 팔아넘기다
혹시 BOM을
혹시 BOM을 말씀하시는 거라면, utf-8은 BOM이 있는 경우도 있고 없는 경우도 있습니다.
게다가 저만 그런건진 모르겠지만 BOM이 달린 utf-8문서는 본적이 없네요...
BOM은 utf16, utf32일때만
BOM은 utf16, utf32일때만 해당됩니다. utf8은 해당사항 없습니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
MS 윈도우에서는 많이
MS 윈도우에서는 많이 볼 수 있습니다.
메모장에서 작성하면 BOM이 달리는 걸로 알고 있습니다.
--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
먼저 아래 명령어로
먼저 아래 명령어로 utf-8 인코딩인지 먼저 검사합니다.
위 명령에서 실패했다면 cp949를 검사하죠.
그다음 같은 방법으로 euckr로 검사합니다.
검사순서는 텍스트가 0x20부터 0x7f까지의 아스키로만 된 경우 utf-8로 판단하기 위함이구요... 필요하면 바꿔도 되죠.
참고로 바이트 모양이 같으면 cp949문서가 utf-8로도 판단될 수 있습니다. 이경우 텍스트가 깨졌는지 눈으로 보고 판단을 해야겠죠....
용량이 크거나, 파일이 많다면...
용량이 크거나 파일이 많다면 특정부분만 짤라서 iconv 하시는게 좋을 듯합니다.
저도 귀찮아서 매번 그냥 스크립트로 UTF-8, EUC-KR, ASCII, EUC-JP ..등으로 iconv 하는데 은근히 시간걸리네요.
좀 화끈(?)한 방법이 있으면 좋으련만...
OTL
Hello World.
head가 출동하면
head가 출동하면 어떨까요?
euc-kr 에 대해서만 php
euc-kr 에 대해서만 php 로 체크를 할 수 있도록 만들어 놓은 것이 있습니다. 다른 문자셋에 대해서는 고려를 하지 않은 관계로 .. 제 트랙백 처리에 사용을 하고 있습니다.
http://my.oops.org/62 참조 :-)
다들 고맙습니다 ^^
답변들 고맙습니다. ㅎㅎ
제가 알고있던게 file인듯 싶네요... ;; 설마했지만.. 예전엔 다 되는듯 했는데 다 되는게 아니었나 봐요 ^^;
귀찮지만.. 일일이 확인하는 수밖엔;;
-------------------------------------------------------------------------------------------
생각은 지나가던 개새끼도 하지.. 실천하는건?? 나도 할수있지...
http://mrdics.tistory.com
-------------------------------------------------------------------------------------------
이놈의 IT 생활... 실증나고 짜증나고...
근데 왜 맨날 it관련 소식만 보고 ;;; 님휘
mozilla 에서 나온
mozilla 에서 나온 chardet 를 사용하는 방법도 있습니다. (c++)
이를 python 으로 포팅한 게 아래 녀석이구요.
http://chardet.feedparser.org/
찾아보시면 java 버젼도 있습니다.
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
완벽하게 구별하는
완벽하게 구별하는 방법은 없고,
직접 구현하고자 하신다면 개별 문자들이 euckr이나 utf8로 해석되었을 경우
한글 영역 등에 맞는 경우가 발생하는 빈도를 가지고 판단을 해야 합니다.
좀 인공지능적인 개념이 들어가야죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
IBM의 ICU에서도
IBM의 ICU에서도 mozilla의 chardet과 같은 역할을 하는게 있습니다.
http://www.icu-project.org/
--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
윗분들이
윗분들이 말씀하셨다시피 UTF-8이든 EUC-KR이든 바이트열 포맷의 일종이고, 같은 바이트열에 대해 두 문자셋에서 모두 적법할 수 있습니다. 대개 그래서 적법성을 판단하기 보다는 Mozilla의 chardet처럼 해당 문자셋에서 통계적으로 잦은 조합들을 가지고(이를테면 EUC-KR은 한국어를 위해 많이 사용되므로, 한국어 문장에서 잦은 패턴들이 그대로 반영되겠죠) 패턴을 확인하는 식으로 추측합니다.
2년여를 기다려도 icu
2년여를 기다려도 icu 의 chardet 도 PHP 에서는 지원하지 않네요. 기다리다 지쳐서 mod_chardet 확장을 만들어 버렸습니다. ICU / Universal chardet(Mozilla) 둘다 지원합니다.
자세한 내용은 http://my.oops.org/126 을 참조하세요.
못찾아서 구현....(사용해보시고, 버그 알려주시면 감사하겠습니다.)
함수 크기를 좀 줄였으면, 하는데...줄일 수 있으시면, 줄여 주시면 감사하겠습니다.
glib
glib (LGPLv2)
http://code.metager.de/source/xref/freedesktop/pkg-config/glib/glib/gutf8.c#fast_validate_len
android (Apache 2.0)
https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/media/jni/android_media_MediaScanner.cpp#61
댓글 달기