-
아두이노 URL utf8 한글 변환백엔드/Arduino + RaspPi 2019. 2. 18. 11:21728x90
URL에서 UTF-8을 사용하는 이유
URL에서 UTF-8로 인코딩하는 이유는 주로 다국어 문자를 안전하게 전송하고 처리하기 위해서이다. 일반적으로 URL은 ASCII 문자 집합만을 사용하여 표현된다. 하지만 URL에는 ASCII 문자 집합에 속하지 않는 다양한 문자(한글 등)가 포함될 수 있어서 이런경우에 UTF-8로 인코딩하여 '%ED%95%9C%EA%B8%80 → 한글' 이런 식으로 전달한다.
소스 코드
아래는 UTF8로 인코딩 되어 전달된 매개변수를 한글로 변환하는 소스이다.
String utf8tokor(String utf8){ String outputdata = ""; int tmp = 0; int ttmp = 0; char utf8data; tmp = utf8.indexOf('%',tmp);//처음 %찾기 while(tmp > -1){//%가 없으면 String temp = utf8; utf8data = utf8c(temp.substring(tmp+1,tmp+3)); temp = utf8; if(ttmp != tmp){//다음 단어의 시작 %가 이번 단어의 끝과 같지 않을땐 사이에 일반 값이 있으므로 outputdata += temp.substring(ttmp,tmp);//%--%--%--와%--%--%-- 사이의 값을 잘라내어 저장 } ttmp = tmp+3; tmp = utf8.indexOf('%',tmp+3); outputdata += utf8data; } outputdata += utf8.substring(ttmp,utf8.length());//맨뒤 남은것 저장 return outputdata; }
int utf8c(String utf8data){ int returndata = 0; int i=0; Serial.print(utf8data); for(i=0;i<=1;i++){ if((utf8data[i] > 47) && (utf8data[i] < 58)){ //0~9 returndata += (((int)utf8data[i]-48) * (int)(pow(16,(1-i))+0.1)); } if((utf8data[i] > 64) && (utf8data[i] < 71)){ //A~F returndata += (((int)utf8data[i]-55) * (int)(pow(16,(1-i))+0.1)); } } return returndata; }
(int)(pow(16,(1-i)))가 아닌 (int)(pow(16,(1-i))+0.1))를 한 이유는, 아두이노에서는 부동소숫점을 int로 치환하는 경우 16.00이 15로 변환되기 때문에 16.10으로 만들어 16으로 만들어주기 위함이다.
사용 방법 : Serial.println(utf8tokor("%ED%95%9C%EA%B8%80")); 출력 : 한글
728x90댓글