gpt4 book ai didi

c# - 读取ISO 8859 1编码,用webclient下载xml流

转载 作者:数据小太阳 更新时间:2023-10-29 02:06:57 25 4
gpt4 key购买 nike

我正在尝试进行基本的网络客户端调用,以获取用于 WP7 的帖子跟踪应用程序的 xml 流。它确实有效,我确实得到了 xml,但问题是因为我住在瑞典,我们有特殊字符,如 å ö ä 等,对于这些字符,我只得到一个里面有问号的框。

我想要获取的 xml 文件如下所示:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 
<pactrack version="2.0" date="Sat Jan 14 18:29:26 CET 2012" size="2125" lang="SE">
<header>
<noofparcelentries>1</noofparcelentries>

...

所以编码是 ISO-8859-1,我想这是我的问题。一直试图在论坛上阅读解决方案,有人说支持该格式,而有些则不支持: Reading iso-8859-1 rss feed C# WP7

我一直在尝试向客户端添加不同的编码,但似乎无济于事,我的 xml 总是缺少特殊符号。然而,有一种奇怪的行为让我有点害怕,如果我添加了错误的跟踪号码,而不是数字放在特殊字符中,我可以突然读取一些特殊字符,我从服务器获得的 xml 是一条错误消息,其中包含跟踪号,见下文,但 xml 定义相同。

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<pactrack version="2.0" date="Sat Jan 14 18:34:43 CET 2012" size="389" lang="SE" >
<header>
<noofparcelentries>1</noofparcelentries>
<noofuniqueparcels>1</noofuniqueparcels>
</header>
<body>
<parcel id="8538öööåå54248SE"> //I can read this road of xml suddenly
<customerref></customerref>
<internalstatus>0</internalstatus>

有人有什么想法吗?我是初学者,完全被这个问题弄糊涂了,所以任何帮助将不胜感激!第一个 xml 和第二个 xml 有什么区别吗?在我看来,我可能看不到嵌套在节点中的特殊章程,这会是问题所在吗?

    WebClient client = new WebClient();

public MainPage()
{
InitializeComponent();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
}

void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
if (e.UserState as string == "mobiforge")
{
txtStatus.Text = e.BytesReceived.ToString() + "bytes received.";
}
}

public void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null && !e.Cancelled)
{
MessageBox.Show(e.Result);
}
}

private void btnDownload_Click(object sender, RoutedEventArgs e)
{
client.DownloadStringAsync(new Uri("http://server.logistik.posten.se/servlet/PacTrack?lang=SE&kolliid=85380954248SE"), "posten");
}

最佳答案

根据这个MSDN page , Silverlight 只支持这四种编码:

  • utf-8 UTF8Encoding

  • utf-16 UnicodeEncoding (little-endian)

  • utf-16BE UnicodeEncoding (big-endian)

  • utf-16LE UnicodeEncoding (little-endian)

根据您链接中的一个答案,用户已经设法通过对字符的上半部分进行轻微调整来使其正常工作。我认为这对您不起作用?

您可以下载原始字节 (OpenReadAsync) 并在原始字节上执行您自己的编码,而不是 DownloadStringAsyncThis program可能会帮助您开始这方面的工作。

编辑 - 注意到 MSDN 页面底部的注释,说明支持 ISO-8859-1。当你尝试这个时会发生什么:

client.OpenReadAsync(new Uri("http://server.logistik.posten.se/servlet/PacTrack?lang=SE&kolliid=85380954248SE"), "posten");

然后,在您的回调中,使用编码器读取数据。

var enc = Encoding.GetEncoding("iso-8859-1");
using (var reader = new StreamReader(e.Result, enc))
{
var result = reader.ReadToEnd();
Debug.WriteLine(result);
}

关于c# - 读取ISO 8859 1编码,用webclient下载xml流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com