urlencode 질문드립니다.
글쓴이: redpig / 작성시간: 수, 2012/07/11 - 8:26오후
static char _x2c(char hex_up, char hex_low) { char digit; digit = 16 * (hex_up >= 'A' ? ((hex_up & 0xdf) - 'A') + 10 : (hex_up - '0')); digit += (hex_low >= 'A' ? ((hex_low & 0xdf) - 'A') + 10 : (hex_low - '0')); return (digit); } char *qURLencode(char *str) { char *encstr, buf[2+1]; unsigned char c; int i, j; if(str == NULL) return NULL; if((encstr = (char *)malloc((strlen(str) * 3) + 1)) == NULL) return NULL; for(i = j = 0; str[i]; i++) { c = (unsigned char)str[i]; if((c >= '0') && (c <= '9')) encstr[j++] = c; else if((c >= 'A') && (c <= 'Z')) encstr[j++] = c; else if((c >= 'a') && (c <= 'z')) encstr[j++] = c; else if((c == '@') || (c == '.') || (c == '/') || (c == '\\') || (c == '-') || (c == '_') || (c == ':') ) encstr[j++] = c; else { sprintf(buf, "%02x", c); encstr[j++] = '%'; encstr[j++] = buf[0]; encstr[j++] = buf[1]; } } encstr[j] = '\0'; return encstr; }
구글링해서 찾아낸 urlencode 소스인데요..
이 소스로 "한글"을 인코딩해보면 "%C7%D1%B1%DB" 이렇게 나오는데요..
자바스크립트의 encodeURIComponent()로 똑같이 "한글"을 인코딩해보면 "%ED%95%9C%EA%B8%80" 이렇게 나오던데요..
왜 결과값이 다른걸까요?
구글링해서 찾아본 다른 소스들도 모두 위 소스와 같은 방식으로 인코딩을 하던데요..
자바스크립트 encodeURIComponent()와 같은 인코딩 결과값이 나오게 하고 싶은데 어떻게 해야하는지 도무지 모르겠네요..
Forums:
c++ 코드입니다.
http://www.zedwood.com/article/111/cpp-urlencode-function
그건 입력으로 들어간 "한글" 문자열의 인코딩이
그건 입력으로 들어간 "한글" 문자열의 인코딩이 뭐냐에 따라 달라진 거라서요,
"%C7%D1%B1%DB" 이렇게 나올 때는 euc-kr, 윈도우라면 cp949 로 인코딩되어 있는 거고
"%ED%95%9C%EA%B8%80" 이건 UTF-8 이네요.
좋은 하루 되세요!
아하.. 그렇군요.
질문자께서 올리신 코드도 정상 동작하는데, 괜히 다른 코드를 링크로 남겼네요.
말씀하신 것처럼 "한글" 이라는 문자열 자체가 cp949 또는 euc-kr 일때는 "%C7%D1%B1%DB"라고 나오지만
UTF-8 로 하면 질문자께서 원하시는 결과가 나오네요 ㅎㅎ
그럼 어떻게 해야하나요?
그래서 어떻게해야 원하는 결과가 나오는건가요?
무엇을 원하시나요?
무엇을 원하시나요?
댓글 달기