프리플랜([url=http://freeplane.sourceforge.net/wiki/index.php/Main_Page:3fhqc968]freeplane[/url:3fhqc968])이란 마인드맵 프로그램을 사용합니다. 프리마인드([url=http://freemind.sourceforge.net/wiki/index.php/Main_Page:3fhqc968]freemind[/url:3fhqc968])에 몇 가지 기능을 추가한 프로그램이라 사용방법도 거의 같고 파일 형식도 같습니다.
그런데 두 프로그램에서 만듬 파일에서는 한글 문자열을 검색할 수가 없습니다. 파일 내용을 cat 명령어로 확인해 보니 한글이 모두 ‘전체자료’ 와 같은 형식으로 표현되어 있네요.
구글링해보니 이걸 decimal code 라고 부르는 모양인데 이걸 제대로 된 문자로 바꾸는 방법이 없을까요?
재미있는 건, 시험삼아 위의 코드를 구글 검색창과 다음 검색창에 집어 넣었더니 ‘전체자료’ 라는 한글 문자로 자동 변환되더군요. 네이버에서는 아무 변화가 없었습니다. 구글과 다음은 이걸 자동으로 바꾸어 주는 코드가 검색 프로그램 안에 들어 있는가 봅니다.
‘전체자료’
이런 형식으로 표현되는 것은 x-www-form-urlencoded 방식의 표현으로,
HTML, XML등에서 아스키코드을 제외한 영역과 기타 마크업에서 사용될 문자들을 10진수로 표현한 방식입니다.
그러니 html2text등으로 변환하면 그냥 한글로 표현됩니다.
이런 널리 통용되는 규격으로 표현된 텍스트는 변환 방법이 무수히 많습니다.
python에서 URLEncode등의 라이브러리나, cgi 관련 라이브러리를 사용해도 되고,
쉘스크립트나, perl등에서 정규표현식을 사용해서 변환하실 수 도 있습니다.
매우 간단한 코드로,
[code:kqc23hhx]perl -pe ‘binmode(STDOUT, ":utf8"); s/&#([0-9]+);/{chr($1)}/sge’[/code:kqc23hhx]
이런 식으로 변환하실 수 있습니다.
[code:kqc23hhx]echo -e "전체자료\naaa" | perl -pe ‘binmode(STDOUT, ":utf8"); s/&#([0-9]+);/{chr($1)}/sge’
cat x.html | perl -pe ‘binmode(STDOUT, ":utf8"); s/&#([0-9]+);/{chr($1)}/sge’[/code:kqc23hhx]
답글 감사합니다. protochaos 님 덕분에 개념은 확실히 알게 되었습니다. 그래도 여전히 궁금한 게 더 있는데요…
-
위에 적어주신 코드로 시험해 봤는데, html 문서 전체가 바뀌지 않고 제목만 한글로 바뀌었습니다. html 파일 전체를 변환시키는 방법은 없을까요?
-
혹시 마인드맵 프로그램이 실행될 때 이 변환 작업을 자동으로 하게 하는 방법은 없을까요? 제가 원래 하려는 작업은 recoll 데스크탑 검색 프로그램에서 프리플랜으로 만든 mm 파일 본문 검색을 하려는 겁니다. 그럴려면 mm 파일 본문 안에 한글 문자가 제대로 입력되어 있어야 합니다. 프리플랜은 자바 프로그램이고, 실행 파일은 쉘 스크립트 파일이라 혹시 방법이 있을까 싶어서 여쭈어 봅니다.
[url=https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=944&start=0:2pno029r]freeplane 사용자 포럼[/url:2pno029r] 게시판에 물어보았더니 답이 달렸네요. 역시 스크립트를 이용하는 방법 밖에 없군요.
답을 단 사람이 구글검색링크 하나 걸어주었는데 변환하는 방법이 다양하네요. 필요하신 분 참고하라고 링크 남겨 둡니다.
[url=https://www.google.de/search?q=bash+unicode+to+html+entities:2pno029r]bash unicode to html entities[/url:2pno029r].