2013-05-16 50 views
0

我發現我有一個應用程序的XML文件無效字符誰使用的Indy客戶端(實際上我用的IdHttp默認參數)Indy Tidhttp發佈XML文件的正確編碼是什麼?

這裏是我的代碼:

ts := TStringList.Create; 
    try 
    ts.Add('XML=' + AXMLDoc.XML.Text)); 
    HTTPString := IdHTTPClient.Post('http://' + FHost + ':' + IntToStr(FPort) + FHttpRoot, ts); 
    finally 
    ts.Free; 
    end; 

我的XML文件是UTF-8編碼。

我必須做的是在我的服務器上獲得良好的編碼(我也使用Indy作爲服務器)?

+1

使用XML標題中'encoding'屬性值中的內容。如果它是UTF-8,那麼我會嘗試['this code'](http://pastebin.com/tQU43EiP)。 – TLama

+0

編碼爲UTF-8 <?xml version =「1.0」encoding =「UTF-8」?> –

回答

3

UTF-8是使用TIdHTTP用於提交TStringList對象的默認字符集。真正的問題是,不應該使用TStringList來提交XML,即使使用正確的字符集也是如此。原因是因爲TIdHTTP.Post(TStrings)方法實現了application/x-www-form-urlencoded內容類型,因此對內容進行了url編碼,如果接收方不期望這樣會破壞XML。因此,除非接收者實際上期待真正的application/x-www-form-urlencoded編碼請求,否則應該使用TIdHTTP.Post(TStream)方法傳輸XML,以便原樣保留原始XML字節。

+0

它現在可以在Windows上正常工作:) 它爲iOS編譯,但當我嘗試在iOS上執行時,它會使HTTP 500內部服務器錯誤:什麼可以是錯誤? –

+0

如果不比較兩個平臺的實際HTTP請求數據,就沒有辦法知道。你如何準確地創建和提交XML? –

+0

XML是TXMLDocument,我是這樣的http://pastebin.com/PXq4vC1Z 它是一個組件,它用於Win32和iOS –

相關問題