2009-12-10 3 views
2

웹 서비스를 호출 할 때 다음과 같은 오류 발생. 다른 질문을하지 않고봤을 때 같은 질문을하는 사람들..NET Webservice = 대리 쌍이 유효하지 않습니다.

Server was unable to process request. ---> The surrogate pair (0xD860, 0x27) is invalid. A high surrogate character (0xD800 - 0xDBFF) must always be paired with a low surrogate character (0xDC00 - 0xDFFF)."} 
System.Exception {System.Web.Services.Protocols.SoapException 

웹 서비스는보기를 실행하고 데이터 집합을 열고 데이터를 읽고 그것을로 포맷 된 XML을 반환하여보기에서 간단한 텍스트 필드의 시리즈를 반환합니다. 편집

는이

string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; 
return Regex.Replace(text, re, string.Empty); 

답변

2

어떤 일이있을 수있는 것은 MS 워드/엑셀 문자로 일어난 나쁜 문자를 제거합니다 다음 정규식을 사용하여 해결할 수 있었다 :

  • XML 파일에는 ED A1 A0 27 바이트가 들어 있습니다. chardet에 따르면이 파일은 эба'은 IBM866에서 인코딩되었습니다.
  • 그러나 encoding 선언이 없으므로 파서는 UTF-8이라고 가정합니다.
  • 텍스트가 UTF-16 문자열 D860 0027으로 디코딩됩니다.
  • 이 문자열은 지원되지 않는 대리자 D860 때문에 유효하지 않으므로 예외가 발생합니다.
+0

흥미 롭습니다. 이걸 어떻게 압니까? –

+0

MSWord/Excel 사이에서 복사 한 다음 데이터베이스에 삽입함으로써 발생하는 잘못된 문자라고 밝혀졌습니다. 다음 문자열을 사용하여 잘못된 문자를 제거했습니다. @ ""[^ \ x09 \ x0A \ x0D \ x20- \ xD7FF \ xE000- \ xFFFD \ x10000-x10FFFF] "; return Regex.Replace (text, re, string.Empty); –