XML フィードから £ 記号を抽出しようとしています (完全版はこちら > http://mjsiphone.com/scotjobsnet/ )
ミニバージョンはこちら > http://scotjobsnet.co.uk.ni.strategiesuk.net/testfeed.xml
フィードのソースやソース サーバー、フィードのフォーマット方法、使用するヘッダーなどを制御することはできません。
データを抽出して独自のサイト データベースに保存する .NET 4.5 コンソール アプリケーションを作成するだけです。
また、すべての HTML を (ジョブの説明から) 削除し、HTML エンコードされた文字をすべて削除して、実際の値に置き換える必要があります。
したがって、MS SQL 2008 DB では、£20,000 や £20,000 などではなく、実際の £ 記号を nvarchar データ型で保存する必要があります。
フィードのソースを表示すると、先頭に UTF-8 があります。
ただし、ブラウザのソースでフィードを表示すると、要求/応答ヘッダーとして UTF-8 についての言及は見られず、要求ヘッダー (Chrome) には次のようにしか表示されません。
Accept-Language:en-GB、en-US;q=0.8、en;q=0.6
ブラウザまたはコンソールから SQL に文字をコピー アンド ペーストしてチェックすると、正しい ASCII 文字エンコーディングである 163 が返されます。
ブラウザでフィードを表示すると、ポンド記号は問題なく表示されます。
コンテンツを Windows コマンド コンソールにパイプするだけで、£ 記号として問題なく表示されます。
ただし、それらをDBに保存するか、コンソールデバッグをEditPlusのファイルにパイプアウトしようとすると(文字エンコーディングがUTF8またはASCIIに設定されています)、CMDなどの記号の代わりに数字の前に四角が表示されます
[.exe へのパス] > [debug.log ファイルへのパス]
コンソールがコンテンツをエディターに正しくパイプできないか、正しいエンコーディングを使用するか、より多くのヘッダーを渡すか、XML を別の方法で抽出する必要があります。
これをテストするために使用しているコードの例を次に示します。これは、£ 記号を使用するフィールドを 1 つだけ使用してブレークします。
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 コンソールで出力を表示する前に述べたように、£ は問題なく表示されます。
ありがとう