• 아두이노 URL utf8 한글 변환
    백엔드/Arduino + RaspPi 2019. 2. 18. 11:21
    728x90

    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

    댓글

Copyright ⓒ syudal.tistory.com