簡體   English   中英

Xamarin Android中的C#/ Java驗證Unicode字符

[英]C#/Java Validate Unicode characters in Xamarin Android

我正在將XML發送到第三方Web服務。 XML中的某些字符會導致Web服務引發異常,例如:

未處理System.ServiceModel.FaultException HResult = -2146233087
Message = System.Web.Services.Protocols.SoapException:服務器無法處理請求。 ---> System.Text.EncoderFallbackException:無法將索引281處的Unicode字符\\ u0193轉換為指定的代碼頁。

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

  1. 如果該字符位於Unicode字符表的前0-255個字符之內,並且不包括128-160范圍內的某些字符,或者
  2. 對於255范圍以上的某些特定Unicode字符,例如“ƒ”(402)。 我注意到其中大多數在此頁面上標記為“ in WGL4”。 但是,某些標記為“在WGL4中”的確會引起異常。

當用戶在文本框中鍵入內容,或者從Word文檔或電子郵件中粘貼到文本框中(然后將文本發送到Web服務)時,我們會看到此問題。

我想限制可以在文本框中輸入哪些字符。 首先,我需要進行以下基本測試:

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

但是,這不允許使用大於255的某些有效字符。如何在不求助於一長串可能值的硬編碼的情況下添加條件以允許使用這些字符,例如,是否可以使用現有方法?

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

要查看文本是否僅包含可以編碼為Windows-1252字符,請使用以下Java代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM