2010-11-25 4 views
2

C#でActive Directoryから(DirectorySearcherを使用して)ユーザーデータを取得し、REST APIを使用してリモートサイトにポストするアプリケーションで作業しています。しかし、一部の名前にはØÅÅなどの特殊文字が含まれているため、正しくエンコードする方法がわかりません。 APIは、& 230のようにエンコードされたものを受け取ることを期待しています。C#RESTクライアント - XMLで特殊文字を符号化する

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Xml; 
using System.IO; 

namespace Encodingtest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlWriterSettings xws = new XmlWriterSettings(); 
      xws.Encoding = Encoding.UTF8; 

      StringWriter sw = new StringWriter(); 
      using (XmlWriter xw = XmlWriter.Create(sw, xws)) 
      { 
       xw.WriteStartElement("test"); 
       xw.WriteElementString("element", "test øæåØÆÅ"); 
       xw.WriteEndElement(); 
       xw.Flush(); 
       xw.Close(); 
      } 
      Console.WriteLine(sw.ToString()); 
      Console.ReadLine(); 
     } 
    } 
} 

問題は、出力が入力と同じフォーマットのままであることである。等

次テストスタブです。つまり、数字のエンティティではなく、読みやすいデンマーク語の文字です。

REST APIは、Railsアプリbtwです。私は、C#アプリケーションのすべてのデータがデフォルトでユニコードであると仮定します。

ヘルプとヒットは大変ありがとうございます。

乾杯

+0

Railsアプリケーションを修正する必要があるように聞こえますが、変更することができない場合は回避策があります。 –

答えて

1

任意のシステム処理XMLは、エンコーディングを明示的にUTF-8として宣言されている場合は特に、UTF-8文字セットを処理することができるはずです。これらの文字を数値エンティティ参照としてエンコードする必要はありません。

これらの文字が数値エンティティでシリアル化されるようにするには、エンコーディングをasciiまたはus-asciiのような小さな文字セットに設定します。あなたのコードで

、変更:xws.Encoding = Encoding.ASCII;

これらの文字がascii文字セットの外にあるので、それらは数値文字エンティティとしてシリアライズされます。xws.Encoding = Encoding.UTF8;

へ。

+0

私もそれを試して、それは動作しませんでした。明らかに、ASCIIはそれらの文字を含む 'ISO 8859-1'にマップされています。チャートをご覧ください:http://www.w3schools.com/tags/ref_entities.asp –

+0

うーん、なぜそれがISO 8859-1にマッピングされているのだろうか。私はC#/ .NET開発者ではありません。 ASCIIとISO 8859-1ははっきりと異なっています。 http://www.w3schools.com/tags/ref_ascii.asp –

0

おそらく、ちょうどあなた自身の「数値文字参照」ジェネレータに頼る:

foreach (char c in "test øæåØÆÅ") 
{ 
    string encoding = (int)c >= 0x80 ? String.Format("&{0};",(int)c) : c.ToString(); 
    Console.Write(encoding); 
} 

上記のコードはonline converterで見つかったものと一致する出力"test øæåØÆÅ"を生成します。