게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(안드로이드) String에 특수문자 포함시 튕김현상
게시물ID : programmer_1231짧은주소 복사하기
작성자 : 햄볶한완자
추천 : 0
조회수 : 1210회
댓글수 : 6개
등록시간 : 2014/02/14 16:26:53
안녕하세요. 정규식을 이용한 웹 파싱을 구현하고 있는데요, 파싱된 문자열에 euc-kr에 없는 문자가 포함되어 있으면 TextView에 넣을 때 튕겨버립니다. String 값은 이러한 형식으로 되어 있습니다. 어떻게 해결해야 될지 막막해서 문의드립니다. (코드가 개판이어도 이해해 주세요. 제대로 배운 적이 없다보니 ㅠㅠ)

파서
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.InputStreamReader;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import android.util.Log;
  11. import net.htmlparser.jericho.Source;
  12. public class PostListParser {
  13. ArrayList<HashMap<String, String>> ParsePostList;
  14. Source source;
  15. String pageSource;
  16. PostListParser() {
  17. ParsePostList = new ArrayList<HashMap<String, String>>();
  18. }
  19. ArrayList<HashMap<String, String>> ParsePostList(String url) {
  20. try {
  21. ParsePostList.clear();
  22. URL targetURL = new URL(url);
  23. InputStream is = targetURL.openStream();
  24. source = new Source(new InputStreamReader(is, "EUC-KR"));
  25. pageSource = source.toString();
  26. Pattern pattern = Pattern.compile("정규식"); //덩어리 분리
  27. Matcher matcher = pattern.matcher(pageSource);
  28. while(matcher.find()){
  29. Log.d("PARSER", "LOOP CALLED");
  30. String original = matcher.group();
  31. HashMap map = new HashMap<String, String>();
  32. Pattern url_find = Pattern.compile("정규식"); //세부 항목 추출
  33. Matcher url_matcher = url_find.matcher(original);
  34. if(url_matcher.find()) map.put("url", url_matcher.group());
  35. //같은 방법으로 세부 항목 여러 개 추출
  36. ParsePostList.add(map);
  37. }
  38. } catch (IOException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. }
  42. return ParsePostList;
  43. }
  44. }

ListView 어댑터
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.ImageView;
  10. import android.widget.TextView;
  11. public class PostListAdapter extends ArrayAdapter<HashMap<String, String>>{
  12.     
  13.     private View v;
  14.     private ViewHolder holder;
  15.     
  16.     public PostListAdapter(Context context, int resource, List> objects){
  17.         super(context,resource,objects);
  18.     }
  19.     @Override
  20.     public View getView(int position, View convertView, ViewGroup harent){
  21.         if(convertView == null){
  22.             LayoutInflater inflater = LayoutInflater.from(getContext());
  23.             v = inflater.inflate(R.layout.view_list_item, null);
  24.             holder = new ViewHolder();
  25. holder.subject = (TextView) v.findViewById(R.id.view_list_item_title);
  26. //...
  27. v.setTag(holder);
  28.         } else {
  29.             v = convertView;
  30.             holder = (ViewHolder) v.getTag();
  31.         }
  32.         
  33.         final HashMap map = getItem(position);
  34.         
  35.         holder.subject.setText(map.get("subject").toString());
  36. //...    
  37.         return v;
  38.         
  39.     }
  40.     
  41.     class ViewHolder{
  42.         TextView subject;
  43. //...
  44.     }
  45. }

메인 액티비티(AsyncTask 부분)
  1. public class PostListAsync extends AsyncTask<String, String, ArrayList<HashMap<String, String>>>{
  2.         
  3. @Override
  4. protected ArrayList<HashMap<String, String>> doInBackground(String... params) {
  5.     Log.d("ASYNCTASK", "CALLED");
  6.     return parser.ParsePostList(pageURL);//파싱 정보를 ArrayList로 가지고 옵니다.
  7. }
  8. @Override
  9. protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
  10. adapter = new PostListAdapter(PostList.this, R.layout.view_list_item, result);
  11. lv.setAdapter(adapter);
  12. lv.setOverScrollMode(ListView.OVER_SCROLL_ALWAYS);
  13. adapter.notifyDataSetChanged();
  14. }


전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호