보물창고/Programming2014.08.07 23:00






PHP exec()로 java 실행해서 파일 저장할때 한글 깨짐 문제 해결






PHP코드에서 exec()를 이용해 java jar를 실행할때 한글이 깨지는 문제로 일주일을 고생했습니다
검색해보니 저와 비슷한 문제로 질문글 들이 있었으나.. 해결을 했다는 답변이 없어 서더욱 힘들었습니다




제가 가진 문제점은

  • php코드 내에서 아래와 같이 실행을 합니다 
    (%ED%95%9C%EA%B8%80는 "한글"을 URL인코딩한 값) 
    exec("java -jar myjava.jar %ED%95%9C%EA%B8%80");

  • myjava.jar에서 하는 일은 
    String hanVar = URLDecoder.decode(arg[0], "utf-8"); // %ED%95%9C%EA%B8%80 -> 한글 
    System.out.println(hanVar ); //모든 경우에 한글로 잘 출력됩니다 
    ImageIO.write(srcImageBuffer, "gif", new File(hanVar)); // hanVar이름으로 파일 저장

java -Dfile.encoding=utf-8 -jar myjava.jar %ED%95%9C%EA%B8%80 
이 명령을 리눅스 shell에서 실행하면 한글파일로 저장이 잘 됩니다 
그러나 문제는 php에서 exec()로 실행하면 한글 파일이 ???로 저장됩니다





해결의 실마리는 locale명령어였습니다

리눅스에 ssh로 접속해서 locale명령을 하면 다음과 같습니다 
(www-data는 Apache서버 user로 보여 같이 확인했습니다)



모두 utf-8로 잘 나옵니다
그러나..

php에서 exec("locale")를 하니 다음과 같이 나왔습니다



LANG=C로 시스템 디폴트 값을 쓴다고 설정되어 있습니다

PHP에서 exec()로 실행할때 설정된 인코딩이 달라 문제였습니다

해결 방법은 간단했습니다

exec("export LANG=\"ko_KR.utf8\";locale";<추가 명령어>) 이런식으로 명령 앞에 인코딩을 변경하는 문을 날리고 뒤에 필요한 명령을 하면 한글표시가 잘 되었습니다 (중간에 들어있는 locale는 확인하기위한 명령으로 나중에는 제외해도 됩니다)



이렇게 설정하고 나서는 한글파일 이름으로 잘 저장 되었습니다


신고





Posted by 파란물








기사 원문으로 가시면 예제 코드와 자세한 설명을 볼 수 있습니다
 



요약: Google Spreadsheets는 잘 알려진 클라우드 기반 스프레드시트 애플리케이션입니다. 웹 애플리케이션 개발자는 Google Spreadsheets Data API를 통해 온라인 스프레드시트에서 데이터를 액세스하고 검색할 수 있습니다. 이 기사에서는 Google Spreadsheets Data API를 소개하고 PHP 애플리케이션의 컨텍스트에서 이 API를 실제로 사용해 봅니다. 또한, 스프레드시트 내용의 다른 요소들을 추가, 수정 및 삭제하는 방법을 설명합니다.




소개
 본 기사의 첫 번째 파트에서는 Google Spreadsheets 클라우드에 호스트된 사용자 공간 스프레드시트 데이터와 관련된 새 애플리케이션을 개발자가 손쉽게 빌드할 수 있게 해주는 REST API인 Google Spreadsheets Data API를 소개했다. 그리고 스프레드시트, 워크시트, 목록 및 셀 피드의 기초를 설명하면서 Zend Framework에서 이런 피드를 사용하여 빠르고 효율적으로 스프레드시트 내용을 PHP 애플리케이션으로 가져올 수 있는 방법을 보여주었다.
 하지만, Google Spreadsheets Data API는 스프레드시트 검색 및 가져오기만 지원하는 것은 아니다. 기사 시리즈의 결론이 되는 이번 파트에서는 Data API를 사용하여 원격 PHP 애플리케이션에서 행, 셀 및 워크시트를 추가, 업데이트 및 삭제함으로써 스프레드시트 내용을 원격으로 조작할 수 있는 방법을 살펴본다. 본 기사에서 설명하는 기법은 두 가지 예제 애플리케이션으로 보완되며, 이들은 각각 Data API를 사용하여 RSS 피드와 SQL 결과 세트를 읽고 Google Spreadsheet로 가져온다.




목차

워크시트 추가
그림 1. 새로운 빈 스프레드시트
리스트 1. 새 워크시트 추가
그림 2. 새 워크시트가 추가된 스프레드시트
리스트 2. 새 워크시트 추가


워크시트 업데이트 및 삭제
리스트 3. 워크시트 업데이트
그림 3. 새 워크시트가 업데이트된 스프레드시트
리스트 4. 워크시트 삭제
그림 4. 새 워크시트를 삭제한 후의 스프레드시트

워크시트 행 추가
리스트 5. 워크시트 행 추가
그림 5. 새 행이 추가된 워크시트

워크시트 행 업데이트 및 삭제
리스트 6. 워크시트 행 업데이트
그림 6. 일부 행이 업데이트된 워크시트
리스트 7. 워크시트 행 삭제
그림 7. 행이 삭제된 워크시트

예제 애플리케이션: RSS 변환기
리스트 8. RSS 피드에서 워크시트 행 가져오기
그림 9. RSS 피드의 행을 포함한 워크시트

워크시트 셀 수정
리스트 9. 워크시트 셀 업데이트
그림 10. 셀 업데이트 결과
그림 11. 업데이트된 셀을 포함한 워크시트
리스트 10. 워크시트 셀 업데이트

예제 애플리케이션: 데이터베이스 가져오기 도구
리스트 11. 데이터베이스에서 워크시트 셀 가져오기
그림 13. 데이터베이스 결과 세트에서 생성된 Google 스프레드시트



기사 원문으로 가시면 스샷과 예제코드를 포함 전체 소스를 모두 보실 수 있습니다

아이베엠 디벨로퍼 웍스 : http://www.ibm.com/developerworks/kr/
기사 원문 주소 : http://www.ibm.com/developerworks/kr/library/x-googledata2/index.html
이 시리즈의 다른 기사 part1 (영문) : http://www.ibm.com/developerworks/library/x-googledata1/
아이비엠 디벨로퍼 트위터 :  http://twitter.com/#search?q=ibmdw  
 
신고





Posted by 파란물






구글 코드검색 주소
http://www.google.co.kr/codesearch


구글 코드 검색 도움말 
검색 방법이나 검색할수 있는 언어 라이센스등 자세하게 알고 싶으면 위 링크로 ~ ^^


라이센스 관련
Google은 코드 작성자가 표시한 대로 라이센스를 등록하기 위해 노력하고 있지만 때로 실수를 저지르기도 하며 작성자가 잘못된 라이센스를 표시할 수도 있습니다. 또한 코드 검색 결과에서는 소프트웨어에 적용되는 특허에 대해서 표시하지 않습니다. 라이센스 내용에 대해서는 가능한 범위에서 알려 드릴 수 있지만 코드 재사용을 위한 법규를 파악하는 것은 사용자의 몫입니다.



C, C++, Java, C#, ASP, COBOL, PHP,SQL, basic, Fortran, JavaScript 등 내가 한번이라도 들어본 언어말고 처음보는 언어까지 몽땅 검색된다
구글에 이런것까지 있는지 몰랐다 구글 정말 쵴오~ !!
대부분 소스 검색을 한다면 지식인이나 카페같은곳에서 찾아썼는데 구글 코드검색을 이용하면 
좀더 방대한 양을 찾아볼수 있겠지?

저작자 표시 비영리 변경 금지
신고





Posted by 파란물