0

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 コンソールで出力を表示する前に述べたように、£ は問題なく表示されます。

ありがとう

4

1 に答える 1