我正在将XML发送到第三方网络服务。 XML中的某些字符会导致Web服务引发异常,例如:
未处理System.ServiceModel.FaultException HResult = -2146233087
Message = System.Web.Services.Protocols.SoapException:服务器无法
处理请求。 ---> System.Text.EncoderFallbackException:无法
将索引为281的Unicode字符\ u0193转换为指定的代码
页。
在某些情况下不会引发异常:
如果该字符在Unicode字符表的前0-255个字符之内,并且不包括128-160范围内的某些字符,或者
对于255范围以上的某些特定Unicode字符,例如“ƒ”(402)。我注意到这些page上的大多数标记为“ 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
}