Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Java
- NDK
- Kotlin
- Android
- UWP
- Flutter TextField
- Android P
- mfc
- Django REST framework
- 코틀린
- C/C++
- Python
- C
- C++
- android push
- RxJava
- 프로그래머스
- dart
- flutter firestore
- 알고리즘
- FLUTTER
- Django REST Android
- android architecture component
- 안드로이드
- kodility
- 안드로이드 구글맵
- RxAndroid
- Django REST
- livedata
- Rxjava2
Archives
- Today
- Total
개발하는 두더지
[C/C++/MFC] URLEncode, URLDecode 본문
# 웹 관련 프로그래밍시 문자열을 GET이나 POST 방식으로 Ajax Send를 통해 보낼때
IE : 원문 문자열
Chrome , Firefox, Safari, Oprea : UTF-8 인코딩한 문자열
브라우저 별로 다른 값이 넘어간다. 한글이 인코딩되서 넘어가기 때문에 받는 쪽에서 그대로 처리한다면 문제가 발생한다.
# 인코딩된 문자열이 넘어갈 때 적용 방식
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <stdio.h> #include <stdlib.h> 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 *qURLdecode(char *str) { int i, j; if(!str) return NULL; for(i = j = 0; str[j]; i++, j++) { switch(str[j]) { case '+': str[i] = ' '; break; case '%': str[i] = _x2c(str[j + 1], str[j + 2]); j += 2; break; default: str[i] = str[j]; break; } } str[i]=''; return str; } 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] = ''; return encstr; } | cs |
# 받은 문자열을 유니코드로 변경
넘어온 문자열은 UTF-8 이므로
UTF-8 -> Unicode로 변경하면 WCHAR로 문자열을 사용할 수 있다.
1 2 3 4 | // UTF-8 -> Unicode len = MultiByteToWideChar(CP_UTF8, 0, szDecodeParam, strlen(szDecodeParam), NULL, NULL); MultiByteToWideChar(CP_UTF8, 0, szDecodeParam, strlen(szDecodeParam), wzDecodeParam, nLen); |
'C,C++' 카테고리의 다른 글
[C/C++/UWP] UWP 현재 실행되는 경로 구하기 ( Platform::String <-> WCHAR / wstring ) (0) | 2016.07.22 |
---|---|
C++ 11/14/17 이란? (0) | 2016.07.22 |
[C/C++/MFC] C++ HTTP Web Server에서 HTTPS/SSL 사용하기 (AJAX 통신) (5) | 2016.07.22 |
[C/C++/MFC] 윈도우 서비스에서 응용 프로그램 실행하기(CreateProcessAsUser) (8) | 2016.07.22 |
[C/C++/MFC] Unicode Multibyte UTF8 변환 (0) | 2016.07.22 |
Comments