10 번째 수정본 소스 보기 : Perl/WWW-Mechanize
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/WWW-Mechanize 는 읽기 전용 페이지입니다.
Cpan:WWW::Mechanize == # UTF-8이 아닌 사이트에 폼 전송할 때 문자열 인코딩 문제 == * [http://kldp.org/node/114126 Perl의 WWW::Mechanize로 euc-kr 인코딩 쓰는 사이트에 폼 전송할 때 문자열이 UTF-8인코딩되어 버리는 오류 | KLDP] - KLDP와 펄스터디 까페에 질문 ** [http://groups.google.com/group/www-mechanize-users/browse_thread/thread/7a0cf5cff0c1817c?tvc=2&pli=1 problem about posting non-utf8 data - WWW::Mechanize users | Google 그룹스] - 중국 사람도 같은 문제를 겪었었다 ** aero님께서 답을 주셔서 해결됨 ** http://code.google.com/p/www-mechanize/issues/detail?id=101 - Mechanize 모듈 버그리포트에도 올라와 있긴 하다. {{{#!vim perl # 폼의 캐릭터셋을 지정하고 $mech->form_name("form_edit")->accept_charset("euc-kr"); # submit_form할 때 넘겨주는 데이타는 디코드된 스트링으로 넘겨줌 }}} == # content() 메쏘드의 반환값 == WWW::Mechanize를 써서 get()한 후 content()를 써서 웹 페이지의 내용을 반환받을 때, 이전에는 raw data, 즉 바이트 스트림으로 반환되었는데, 어느 버전에서부터인가 decode된 스트링으로 반환된다. 따라서 받은 후에 다시 decode를 할 필요가 없다. (기존 모듈에 맞춰 작성했던 것은 수정해주어야 함) [http://cpansearch.perl.org/src/JESSE/WWW-Mechanize-1.72/Changes Change 문서]를 보면 아마도 2008.9.27에 나온 1.49_01 버전부터 인 듯. 문제는, 항상 디코드되는 게 아니라, 웹페이지의 인코딩이 뭔지 알 수 없거나 실패할 경우는 디코드하지 않은 상태로 반환하기 때문에, 반환값을 일일이 검사해야 하는 경우가 있다. 예를 들어 euc-kr로 인코딩한 웹페이지인데 메타 태그에는 iso-2022라고 적혀 있는 식이라면 디코드하지 못 한다. == # get()에서 실패하면 die ==
get($url)
해서 웹페이지를 긁어올 때 404에러 등이 나면 그 시점에 die해 버린다. [http://cpansearch.perl.org/src/JESSE/WWW-Mechanize-1.72/Changes Changes]를 보면 1.49_01부터는 autocheck 의 기본값이 1로 되어 있어서 그렇다.
new(autocheck => 0)
으로 하고 직접 리턴값 또는 success 를 불러서 검사할 수 있다.
아 놔 영어권 사람들이라 이게 얼마나 심각한 문제인지 몰랐나 이 사람들... 기존에는 웹페이지 읽은 후에 수동으로 디코드 한 번 해 주던 걸 죄다 찾아서 지워야 하고 그랬더니 반대로 전에는 그냥 그 데이타를 넘겨주면 되던걸 인코드해줘야 하고...
----
---- [[컴퓨터분류]]
Perl/WWW-Mechanize
페이지로 돌아가기 |
다른 수정본 보기