我正在尝试从 XML 提要中提取 £ 符号(完整版在这里 > http://mjsiphone.com/scotjobsnet/)
迷你版在这里 > http://scotjobsnet.co.uk.ni.strategiesuk.net/testfeed.xml
我无法控制提要的来源或源服务器,也无法控制提要的格式、它们使用的标头等等。
我只需要构建一个 .NET 4.5 控制台应用程序,它将提取数据并将其保存在我们自己的站点数据库中。
此外,我必须删除所有 HTML(从职位描述中)并删除任何 HTML 编码字符并用它们的真实值替换它们。
因此,我需要在 MS SQL 2008 DB 中以 nvarchar 数据类型保存真正的 £ 符号,而不是 20,000 英镑或 20,000 英镑等。
查看提要的来源时,它的顶部有 UTF-8。
但是,在浏览器源中查看提要时,我没有看到将 UTF-8 作为请求/响应标头,在请求标头 (Chrome) 中我只看到:
接受语言:en-GB,en-US;q=0.8,en;q=0.6
当我将浏览器或控制台中的字符复制并粘贴到 SQL 中并检查它们时,它们返回 163,这是正确的 ASCII 字符编码,例如 £
如果您在浏览器中查看提要,英镑符号会显示得很好。
当我将内容输出到 Windows 命令控制台时,它们会显示为 £ 符号。
但是,当我尝试将它们保存到数据库或通过管道将控制台调试输出到 EditPlus 中的文件(字符编码设置为 UTF8 或 ASCII)时,我只是在数字前面得到正方形而不是在 CMD 中的符号
[.exe 的路径] > [debug.log 文件的路径]
控制台无法正确地将内容传递给编辑器,或者我需要使用正确的编码或传递更多标题或以不同方式提取 XML。
这是我用于测试的代码示例,仅使用一个在其中使用 £ 符号的字段,然后中断。
static void Main(string[] args)
{
Console.WriteLine("START");
XmlDocument xDoc = new XmlDocument();
string feedURL = "http://scotjobsnet.co.uk.ni.strategiesuk.net/testfeed.xml";
WebClient webClient = new WebClient();
// need to pass a user-agent > 10 Chars to prevent blocking by OUR servers 403
webClient.Headers.Add("user-agent", "Mozilla/5.0 (compatible; Job Feed Importer;)");
// piping out to console with this line below shows a £ but to a UTF-8 or ASCII file it's gibberish
webClient.Headers.Add("Content-Type", "application/xml; charset=utf-8");
// I tried this but still the console works but piping to an editor in UTF-8 or ASCII shows squares
webClient.Headers.Add("Accept-Language", "utf-8,en-GB,en-US;q=0.8,en;q=0.6");
// download as text - is this the problem? Should I be using a different method
string feedText = webClient.DownloadString(feedURL);
// load into XML object
xDoc.LoadXml(feedText);
if (xDoc != null)
{
XmlElement root = xDoc.DocumentElement;
XmlNodeList xNodelst = root.SelectNodes("job");
foreach (XmlNode node in xNodelst)
{
string salary = node.SelectSingleNode("candidateSalary").InnerText;
// piped to cmd console the £ signs show but to a UTF-8 file they are just squares
// I've tried adding the Encoding.UTF8 or Encoding.ASCII still no joy
// Console.WriteLine("candidateSalary = " + salary,Encoding.UTF8);
Console.WriteLine("candidateSalary = " + salary);
break;
}
}
Console.WriteLine("FINISH");
}
任何帮助都感激不尽。
我确定这只是我需要传递的标头,或者可能是将 XML 内容输出到编辑器的问题。
正如我在 Windows 控制台中查看输出之前所说,£ 显示良好。
谢谢