Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c语言中的有限(windows-1251)编码停止xml中的无效字符#_C#_Xml_Character Encoding - Fatal编程技术网

C# 如何使用c语言中的有限(windows-1251)编码停止xml中的无效字符#

C# 如何使用c语言中的有限(windows-1251)编码停止xml中的无效字符#,c#,xml,character-encoding,C#,Xml,Character Encoding,这个问题一直困扰着我。我需要向一家俄罗斯网站发送一条xml消息。XML必须在windows-1251中编码 我有许多对象响应不同类型的消息,因此我将它们转换为xml: public string Serialise(Type t, object o, XmlSerializerNamespaces Namespaces) { XmlSerializer serialiser = _serialisers.First(s => s.GetType().FullName.Contain

这个问题一直困扰着我。我需要向一家俄罗斯网站发送一条xml消息。XML必须在windows-1251中编码

我有许多对象响应不同类型的消息,因此我将它们转换为xml:

public string Serialise(Type t, object o, XmlSerializerNamespaces Namespaces)
{
    XmlSerializer serialiser = _serialisers.First(s => s.GetType().FullName.Contains(t.Name));
    Windows1251StringWriter myWriter = new Windows1251StringWriter();
    serialiser.Serialize(myWriter, o, Namespaces);
    return myWriter.ToString();
}

public class Windows1251StringWriter : StringWriter
{
    public override Encoding Encoding
    {
        get { return Encoding.GetEncoding(1251); }
    }
}
这很好,但是如果我们发送任何不在windows-1251中的字符,web服务会拒绝请求。在最新的示例中,我尝试发送一个带有“从左到右嵌入”(U+202A)、“不间断连字符”(U+2011)和“上帝保佑我们”的“弹出方向格式”(U+202C)的电话号码。我无法控制输入。我想把任何未知字符转换成?或者移除它们。我试过搞乱编码器反馈,但它似乎没有改变任何事情


我这样做错了吗?

因为您正在序列化为
字符串
,所以
Windows1251StringWriter
中的
编码
属性为您做的唯一一件事就是更改XML中显示的编码名称:

<?xml version="1.0" encoding="windows-1251"?>
那就做吧

var encoding = Encoding.GetEncoding(1251, new EncoderReplacementFallback(""), new DecoderExceptionFallback());
return o.GetXml(serialiser, Namespaces, encoding);

由于要序列化为
字符串
,因此
Windows1251StringWriter
中的
Encoding
属性为您做的唯一事情就是更改XML中显示的编码名称:

<?xml version="1.0" encoding="windows-1251"?>
那就做吧

var encoding = Encoding.GetEncoding(1251, new EncoderReplacementFallback(""), new DecoderExceptionFallback());
return o.GetXml(serialiser, Namespaces, encoding);