C++ URL 인코딩 (== 퍼센트 인코딩)

 소스 코드는 아래와 같습니다. /** * 주어진 문자열을 URL 인코딩하여 반환함. * * 주요 코드 출처: http://codepad.org/lCypTglt * * @param s utf-8로 인코딩된 멀티바이트 문자열. * (utf-8이 아니면 웹에서 제대로 인식하지 못할 수 있습니다.) * @return URL 인코딩된 문자열 */ std::string UrlEncode(const std::string &s) { //RFC 3986 section 2.3 Unreserved Characters (January 2005) // 참고: http://ko.wikipedia.org/wiki/퍼센트_인코딩 const std::string unreserved = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~"; std::string escaped=""; for(size_t i=0; i<s.length(); i++) { if (unreserved.find_first_of(s[i]) != std::string::npos) { escaped.push_back(s[i]); } else { escaped.append("%"); char buf[3]; /* char를 unsigned char로 바꿔주어야 합니다. * (그렇지 않으면 한글 등의 문자를 제대로 변환하지 못합니다.) */ sprintf(buf, "%.2X", (unsigned char) s[i]); escaped.append(...

RapidXml에서 문자열 파싱하기 및 주의사항

C++에서 XML 파싱에 사용하는 라이브러리 중 RapidXml이 있습니다. 속도가 빠르고, 헤더 파일로만 되어 있어서 단순히 파일을 복사하는 정도만으로 쉽게 사용할 수 있다는 장점이 있습니다. 더군다나 MIT 라이선스로 사용 가능하므로 상업용 프로그램에도 유용하게 사용할 수 있습니다. 공식 사이트: http://rapidxml.sourceforge.net 그런데 주의사항이 있습니다. 우선 아래를 봐주시기 바랍니다. string strXml = "<?xml version="1.0" encoding="utf-8"?><books> ... (중략) ... </books>"; xml_document<> doc; doc.parse<0>( (char*)strXml.c_str() ); xml_node<>* root = doc.first_node(); printf("root 노드 이름: %s\n", root->name()); 위와 같이 하면 std::string으로부터 XML을 파싱할 수 있습니다. 여기서 빨간색 부분을 보시면 const char*를 char*로 변환하는데요, 해보시면 별 문제 없이 잘되는 것 같아 보입니다. 하지만 parse()가 문자열을 변경하지 않는다는 보장이 없습니다.만약 변경해버린다면 예상치 못한 문제가 발생할 것이고, 정말 찾기 힘든 버그가 될 것입니다. 별 문제가 없더라도 아래와 같이 문자열을 복사해서 사용하는 방법을 권장해드립니다. string strXml = "<?xml version="1.0" encoding="utf-8"?><books> ... (중략) ... </books>"; char* sz = new char[strXml.size() + 1]; strcpy(sz, strXm...

프로세스 강제 종료 불가 시.

특정 프로세스를 강제 종료 하려는데... "실행 중인 작업 인스턴스가 없습니다." 이런 메시지가 나타나면서 종료가 안되는 문제가 있었습니다. 작업 관리자에서 "프로세스 종료", "프로세스 트리 종료" 해봐도 안되고, cmd에서 taskkill 해봐도 안되고... 그런데 이게 부모 프로세스를 종료하면 자동으로 종료가 되네요.. (제 경우에는 Visual Studio가 부모 프로세스였습니다. ㅋ) 참고: DEVPIA http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=917792&ref=917791

어느날 갑자기 "알 수 없음."이라는 에러가 발생할 때.

  윈도 XP 를 사용하던 중 어느날 갑자기 일부 프로그램에서 "알 수 없음."(Unknown) 에러가 발생했습니다. 원인을 도무지 알 수 없어서 OllyDbg 를 이용해서 해당 에러가 발생하는 시점을 확인해보니, "Microsoft Jet data engine"이라는 말이 눈에 띄었습니다.   그래서 관련 부분을 검색했는데, 다음의 글을 발견했습니다. Resolving Microsoft Jet Error 'Unknown'   저는 방법 2에서 "msjtes40.dll"만 레지스트리에 다시 등록하고 컴퓨터를 재부팅하니까 증상이 사라졌습니다. 혹시나 같은 문제로 고민하고 계실 분들이 있을지도 몰라서 해결 방법을 아래에 정리(번역)해 두었으니 참고하시기 바랍니다. ^_^ 1. 증상   어느날 갑자기 일부 프로그램에서 "알 수 없음."(Unknown) 이라는 에러가 발생.   (윈도 XP에서 확인. 상위 버전의 윈도에서도 발생하기도 하는 듯.) 2. 증상이 발생하는 프로그램   데이터베이스 (DB)로 마이크로소프트의 엑세스(Access) 를 사용하고 있는 프로그램. (DB 파일의 확장자가 .mdb 임.)   예:  Mybible(성경 읽기 프로그램), 벧엘3(교인, 재정 관리 등) 3. 원인   Microsoft Jet data engine 관련 레지스트리가 손상된 것으로 추정. 4. 해결 방법 # 방법 1: 드라이버 재설치. 제어판에서 프로그램 추가/제거를 실행. Microsoft Access Database Engine 2007 driver가 있으면 삭제합니다. 다음의 링크에서 Microsoft Access Database Engine 2010 재배포 패키지를 받아서 설치합니다. Microsoft Access Database Engine 2010 재배포 가능 패키지 증상이 해결되었는지 확인합니다. # 방법 2: 레지...

VirtualBox 업데이트 후 블루스크린 문제.

  VirtualBox를 업데이트 했는데, 그 후부터 가상 머신을 실행하면, 거의 매번 블루스크린이 뜨는 것이 아니겠어요?! 일하다가 컴퓨터가 갑자기 재부팅 되어 버리니, 겁이 나서 가상 머신을 쓸 수가 없었습니다.   한동안은 다시 예전 버전을 설치해서 쓰다가, 새로운 업데이트가 나와서 이제는 괜찮겠지라는 생각에 업데이트 했는데... 왠걸요. 똑같습니다..   여기 저기 해매다가 마침내 해결법을 알아냈는데요, 가상 머신 설정에서 "시스템 -> 가속"으로 간 후, "네스티드 페이징 사용하기"를 비활성 했더니 이후로는 한번도 그런 문제가 발생하지 않았습니다.  

XE v1.7에서 음성 파일 재생 불가 문제 해결법.

   XE 1.7을 사용하고 있는 사이트에서 문제가 발생했습니다.   게시판에서 음성 파일을 첨부한 후, 게시물에 삽입하면, 다른 웹 브라우저에서는 음성 파일이 잘 재생되나, IE8(혹은 그 이하)에서는 음성 파일이 재생되지 않는 문제였습니다.   아마도 XE가 업데이트되면서 음성 파일 처리에 HTML5 태그인 audio 태그를 쓰도록 수정된 것 같습니다. 하지만, 다행히도 audio 태그를 플래시 플레이어로 변환시켜 주는 애드온이 있었습니다. 그 애드온의 이름은 "HTML5 AUDIO to FLASH"입니다.[1] 이 애드온 덕분에 문제를 잘 해결할 수 있었습니다. ... 이걸로 끝이면 좋았겠지만, 적용해놓고 보니, 정작 중요한 IE8에서는 플레이어가 나타나지 않는 것이었습니다. (산 넘어 산...)   이상한 것은 해당 애드온의 바탕이된 자바스크립트를 개발한 사이트[2]에 가서 데모를 구동해봤는데, IE8에서 플레이어도 잘 보이고, 재생도 잘 되었습니다. 그래서 저는 애드온을 의심하고,코드를 낱낱이 살펴보았습니다. 하지만 특별한 문제점은 없었습니다.. 다음으로는 jQuery나, html5.js와의 충돌을 의심했으나, 모두 아니었습니다.   그러다가 놀라운 글을 발견했습니다.[3] 결론부터 말씀드리자면, p 태그 안에 audio 태그가 있으면, 그런 오류가 발생한다는 것입니다. 그리고 실제로, 게시물에서 p태그를 제거하자 음성 파일이 잘 재생되었습니다.   몇 가지 연구 끝에 IE8[4]에서는 node.outerHTML, innerHTML 함수가 태그에 따라서 안먹히는 경우가 있기 때문에, 이런 문제가 발생했다는 것을 알게 되었습니다. 그렇다면 게시글에서 p 태그만 지우면 되는데, 중요한 문제는 게시판의 WYSIWYG 편집기가 자동으로 p 태그를 입력해버린다는 것이었습니다. 그래서 audio.js (애드온이 사용하는 라이브러리)에서 outerHTML, innerHTML을 사용하지 ...

c000021a unknown hard error 조치법

  윈도 XP 부팅 중 XP 로고 화면이 표시된 이후에 시스템이 재부팅되는 문제가 발생했습니다. 블루스크린이 표시되지 않았기에 F8을 열심히 눌러서 "시스템 오류 시 자동으로 다시 시작 안함"을 선택해서 부팅해보니, 블루스크린이 나타나고, "c000021a unknown hard error"라는 에러 메시지가 표시되었습니다.   찾아보니, 주된 원인은 윈도 파일 중 ws2help.dll가 바이러스에 걸려서 발생한다고 합니다.[1]그래서 하드디스크를 다른 PC에 연결한 후,동일한 버전의 XP (home/pro, sp1/sp2/sp3)의 ws2help.dll을 복사해 덮어 씌웠지만 증상이 해결되지 않았습니다.   고민하던 차에 [2]의 글을 발견하였고, 다음과 같이 하여 문제를 해결했습니다. 문제가 발생한 컴퓨터의 하드디스크를 다른 컴퓨터에 연결한다. 연결된 하드디스크에서 system32 폴더를 통째로 백업한다. (system32 폴더를 통째로 압축하는 것이 편함) 가상 머신이나 여분의 컴퓨터에 동일한 버전의 XP를 임시로 설치한다. 위 "3"의 컴퓨터에서 system32 폴더 안의 파일/폴더를 모두 복사하여 위 "1"의 하드디스크에 덮어씌운다. 단, config라는 폴더는 복사하지 않는다. 위 "1"의 하드디스크를 다시 원래의 컴퓨터에 연결한 뒤 정상적으로 부팅되는지 확인한다. 안되면 포기하고 윈도를 재설치하거나 "2"에서 백업한 파일들을 이용해 이전 상태로 되돌리고 다른 방법을 찾아본다. 참고   [1] "c000021a Unknown Hard Error 해결", http://foreal.tistory.com/68, 2014-11-18 확인   [2] "STOP : c000021a Unknown Hard Error 해결방법", http://intumyself.tistory.com/137, ...