2011-12-07 4 views
0

사이 base64Binary 인의 SOAP 매개 변수를 보냅니다. 물론 HTML은 다른 인코딩으로 코딩 될 수 있지만이 매개 변수는의 base64Binary 유형이며 문제없이 "원시 인코딩"으로 HTML을받습니다.내가 HTML 페이지의 내용을 보내 (WSDL과 <strong>nuSOAP</strong> 사용) <strong>PHP SOAP</strong> 서버가 자바 클라이언트와 PHP 서버

증명을 위해 SOAP 클라이언트를 PHP, C# 및 Java 6으로 코딩했으며 처음 두 개는 아무런 문제가 없습니다.

FileInputStream file = new FileInputStream (new File ("/tmp/chinese.htm")); 
BufferedReader buffer = new BufferedReader (new InputStreamReader (file 
              ,"BIG5")); 
String line; 
String content = ""; 
while ((line = buffer.readLine()) != null) 
    content += line+"\n"; 

FileManagerAPI upload = new FileManagerAPI(); 
FileManagerAPIPortType servUpload = upload.getFileManagerAPIPort(); 

BigInteger result = servUpload.apiControllerServiceUploadHTML (
     "http://www.test.tmp/因此鳥哥建議您務.html", content.getBytes()); 

문제 만 자바 클라이언트가을 UTF8로 HTML 콘텐츠 인코딩 전에 base64 인코딩에 HTML을 보내되고 : 자바 클라이언트는 wsimport의 2.1하고이처럼 코드의 예를 사용 하였다 , PHP가이 파일을 받으면 서버는 "BIG5 파일"이 아닌 "UTF8 아카이브"처럼 관리합니다.

질문은 첫 번째 UTF8 인코딩을 피하는 방법은 무엇입니까? 또는 적어도 utf-8 인코딩을 수행해야합니다.

미리 감사드립니다.

답변

1

파일을 UTF-8 (나는 인코딩이 /tmp/chinese.htm이라고 생각합니다)에서 BIG5로 변환해야합니다.

iconv으로 예를 들어, 파일의 내용을 변환하는 파일과 재 인코딩 읽어 :

$path = '/tmp/chinese.htm'; 
$buffer = file_get_contents($path); 
$buffer = iconv('UTF-8', 'BIG5', $buffer); 

가 버퍼 $buffer 이제 BIG5으로 UTF-8로 다시 인코딩된다.

+0

감사합니다 @hakre,이 특별한 경우에는 iconv가 완벽하게 작동하지만 다른 테스트 (다른 ​​인코딩)로 인해이 함수에서도이 아이콘을 제대로 신뢰하지는 못합니다. 또한, 자바 클라이언트는 utf8로만이 변환을 수행합니다. – doctore

+0

글쎄, 입력 인코딩이 올바르게 지정되어있는 한'iconv'에 문제가 없었지만 중국어 인코딩은별로 작동하지 않습니다. 어쨌든 그것은 잘 만들어진 도서관이므로 나는 그것을 신뢰하지 않는 이유를 보지 못합니다. 오류가 발견 될 경우 변경할 수있는 무료 소프트웨어입니다. 하지만 아마도 근본적인 문제가 보이지 않을 것입니다. 따라서 UTF-8에서 BIG5로 다시 인코딩하는 것이 당신이 직면하고있는 유일한 문제는 아닙니다. 더 자세히 설명해 준다면, 나는 무엇을보아야할지 더 많은 힌트를 추가 할 수있을 것이다. – hakre

+0

나는 HTML의 내용을 저장하기 위해 MongoDB를 가지고있다. (나는 그들과 개별적으로 작업하기 위해 html의 구조를 분해 할 필요가있다.) 이 데이터베이스는 UTF8에서 작동하기 때문에 iconv를 사용하여 웹 페이지의 "원본 인코딩"을 UTF8로 변환하려고했지만 원본 코드에 utf8보다 많은 문자가 있으면이 함수가 올바르게 작동하지 않습니다. 이런 이유로 저는이 html을 MongoDB에 저장하기 전에 유니 코드로 변환하는 것보다 파이썬 스크립트를 사용했습니다. 이것은 iconv 함수를 신뢰하지 않는 인수입니다. – doctore