2017-04-07 60 views
0

我正在將XML發送到第三方Web服務。在XML某些字符使web服務拋出異常,一個例子是:C#/ Java驗證Xamarin Android中的Unicode字符

System.ServiceModel.FaultException了未處理的HResult = -2146233087
消息=服務器無法處理服務器無法 處理請求。 ---> System.Text.EncoderFallbackException:Unable 將索引281處的Unicode字符\ u0193轉換爲指定的代碼 頁面。

的不引發異常在某些情況下:

  1. 如果該字符的Unicode字符表的第一0-255字符中,除了一些在128-160範圍內,或
  2. 對於255範圍以上的某些特定Unicode字符,如「ƒ」(402)。我注意到其中大部分在page上標記爲「在WGL4中」。但是,有些標記爲「在WGL4」中的確會引起異常。

當用戶從Word文檔或電子郵件輸入到一個文本框,或粘貼到文本框(然後將文本發送到Web服務),我們看到了這個問題。

我想限制哪些字符可以輸入到文本框中。作爲一個開始我有這個基本的測試:

if ((chr > 255) || (!XmlConvert.IsXmlChar(chr))) 
{ 
    // Restrict character 
} 

然而,不允許一些上面255的有效字符我如何添加一個條件,允許這些,而不訴諸硬編碼的一個長長的清單可能的值例如有沒有我可以使用的現有方法?

回答

1

看起來服務器正在將文本編碼爲字符集Windows-1252,這是Windows服務器上用於C#代碼的非常常見的代碼頁。

要查看文本只包含可以被編碼到Windows-1252字符,請使用此Java代碼:

String text = ...; 
CharsetEncoder encoder = Charset.forName("windows-1252").newEncoder(); 
if (! encoder.canEncode(text)) { 
    // Text is not supported 
} 
+0

完美,感謝了很多。 – Howard