2012-09-18 2 views
0

XML 문자열이 있습니다. 잘못된 문자열입니다. 하지만 NSLog를 사용하고 콘솔에서 대처 한 후에는 좋은 문자열이되었습니다 (서버로부터 좋은 응답을 받았습니다). 나는이 방법으로 잘못된 문자열을 구축 :NSString 인코딩 문제

NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:enc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns0=\"http://com.test/types/AstoriaObjectProperties\" xmlns:ns1=\"http://com.test/wsdl/AstoriaObjectProperties\" xmlns:ns2=\"http://java.sun.com/jax-rpc-ri/internal\"><env:Body><ns1:setObjectProperties env:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><HashMap_1 xsi:type=\"ns2:hashMap\" enc:arrayType=\"ns2:mapEntry[2]\"><item xsi:type=\"ns2:mapEntry\"><key xsi:type=\"xsd:string\">id</key><value xsi:type=\"xsd:string\">%@</value></item><item xsi:type=\"ns2:mapEntry\"><key xsi:type=\"xsd:string\">annotations</key><value href=\"#ID1\"/></item></HashMap_1><HashMap_2 xsi:type=\"ns2:hashMap\" enc:arrayType=\"ns2:mapEntry[2]\"><item xsi:type=\"ns2:mapEntry\"><key xsi:type=\"xsd:string\">id</key><value xsi:type=\"xsd:string\">%@</value></item><item xsi:type=\"ns2:mapEntry\"><key xsi:type=\"xsd:string\">annotations</key><value href=\"#ID2\"/></item></HashMap_2></ns1:setObjectProperties>%@%@</env:Body></env:Envelope>", fileID, fileID, arrayNewXML, arrayOldXML]; 

내가 서버에이 메시지를 보냈을 때, 나는 응답에 오류가 발생했습니다.

하지만 NSLog를 사용하여 soapMessage를보고 복사하고 버퍼에서 SOAP 메시지를 사용합니다. 이 모양입니다.

<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://com.test/types/AstoriaObjectProperties" xmlns:ns1="http://com.test/wsdl/AstoriaObjectProperties" xmlns:ns2="http://java.sun.com/jax-rpc-ri/internal"><env:Body><ns1:setObjectProperties env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><HashMap_1 xsi:type="ns2:hashMap" enc:arrayType="ns2:mapEntry[2]"><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">id</key><value xsi:type="xsd:string">0000001aWGA2070GYZ</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">annotations</key><value href="#ID1"/></item></HashMap_1><HashMap_2 xsi:type="ns2:hashMap" enc:arrayType="ns2:mapEntry[2]"><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">id</key><value xsi:type="xsd:string">0000001aWGA2070GYZ</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">annotations</key><value href="#ID2"/></item></HashMap_2></ns1:setObjectProperties><ns0:ArrayOfhashMap id="ID1" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="enc:Array" enc:arrayType="ns2:hashMap[1]"><item xsi:type="ns2:hashMap" enc:arrayType="ns2:mapEntry[7]"><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationUser$$$</key><value xsi:type="xsd:string">AstoriaAdmin</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Status</key><value xsi:type="xsd:string">waiting for decision</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationID$$$</key><value xsi:type="xsd:string">00000043X951EE3073607F44F7D00000000000000951FF3076D000000590000003C647C7668696D696B2D6163733A433A5C50726F6772616D2046696C65735C4173746F72696120536F6674776172655C434D535C64617461626173655C63616231303030302E64627C31347C367C3263307C31303030303E00704B585000000000YZ</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Comment</key><value xsi:type="xsd:string">comment</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationDate$$$</key><value xsi:type="enc:dateTime">2012-09-18T10:22:40.000Z</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Status Comment</key><value xsi:type="xsd:string">status comment</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationName$$$</key><value xsi:type="xsd:string">Legal Review</value></item></item></ns0:ArrayOfhashMap><ns0:ArrayOfhashMap id="ID2" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="enc:Array" enc:arrayType="ns2:hashMap[1]"><item xsi:type="ns2:hashMap" enc:arrayType="ns2:mapEntry[7]"><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationUser$$$</key><value xsi:type="xsd:string">AstoriaAdmin</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Status</key><value xsi:type="xsd:string">waiting for decision</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationID$$$</key><value xsi:type="xsd:string">00000043X951EE3073607F44F7D00000000000000951FF3076D000000590000003C647C7668696D696B2D6163733A433A5C50726F6772616D2046696C65735C4173746F72696120536F6674776172655C434D535C64617461626173655C63616231303030302E64627C31347C367C3263307C31303030303E00704B585000000000YZ</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Comment</key><value xsi:type="xsd:string">comment</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationDate$$$</key><value xsi:type="enc:dateTime">2012-09-18T10:22:40.000Z</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">Annotation Status Comment</key><value xsi:type="xsd:string">status comment</value></item><item xsi:type="ns2:mapEntry"><key xsi:type="xsd:string">$$$XD_AnnotationName$$$</key><value xsi:type="xsd:string">Legal Review</value></item></item></ns0:ArrayOfhashMap></env:Body></env:Envelope> 

그런 다음 오류없이 응답합니다.

저는 NSLog가 인코딩 문제를 수정 한 것으로 보입니다. 하지만 내 비누에서이 문제를 해결하는 방법 은요? 나는 시도했다 :

soapMessage = [soapMessage stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
soapMessage = [soapMessage stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
soapMessage = [soapMessage stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

그것은 도움이되지 않았다.

+0

동일한 코드 또는 독립 실행 형 클라이언트에서 콘솔의 텍스트를 사용하고 있습니까? –

+0

동일한 코드로 콘솔의 텍스트를 사용했습니다 –

+0

빈 매개 변수가있는 요청이 유효해야한다면 형식 리터럴 또는 매개 변수 문제인지 확인하기 위해이를 수행하려고합니다. 그런 다음 가능한 한 많은 매개 변수를 제거하려고합니다 (형식이 지정된 문자열 매개 변수를 하나씩 콘솔 출력으로 바꾸십시오. 이렇게하면 문제를 좁힐 수 있어야합니다). 또한'encoding = "UTF-8"태그를 사용하면 매개 변수를'[fileID UTF8String]','[arrayNewXML UTF8String]'등으로 사용할 것입니다. –

답변

0

나는 단지 손님 인코딩 및 수동으로 삭제 나쁜 문자 :

NSMutableData *soapdata = [[[NSMutableData alloc] initWithData:[soapMessage dataUsingEncoding:NSNonLossyASCIIStringEncoding]] autorelease]; 
    soapMessage = [[[NSString alloc] initWithData:soapdata encoding:NSUTF8StringEncoding] autorelease]; 
    soapMessage = [soapMessage stringByReplacingOccurrencesOfString:@"\\ufffc" withString:@""]; 
    soapdata = [[[NSMutableData alloc] initWithData:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]] autorelease]; 

그리고 지금은 작동한다!