2015-06-02 22 views
-1

你好,我需要從快速的ftp服務器下載一個xml文件。 下載工作,我試着用UTF8編碼的xml文件。 但是,如果我下載了我需要的具有utf 16編碼的文件,我得到了一個有很多0字節的大字節數組。 當我嘗試編碼並保存它。它保存了一個與原始文件相當大的文件。 我已經嘗試刪除0字節並進行編碼並將其保存爲這樣。 結果是編碼不工作,我得到類似的東西從ftp服務器快速下載文件,並從utf 16(xml文件)編碼它

!!!!!結果:可選(䐼瑡湥ਾ㰉敓汩㹥ऊ㰉敓汩湥慢卷摯㹥䉚ぃ〰 〰〰㤷⼼敓汩湥慢卷摯㹥ऊ㰉牐橯步湴浵敭㹲ㄱ㄰〲㄰〰⼼牐橯步湴浵敭㹲ऊ㰉牐橯步扴獥檔敲擴湵㹧䉅⁚䅄⁇劑〲`㉚䄭晵慢汵湩斆䱐䠠湵㱤倯潲敪瑫敢捳牨楥畢杮ਾउ䈼獥檔敲擴湵㹧䐲䐠瑥楡㱬䈯獥檔敲擴

這是怎麼了我編碼字節數組

let result = NSString(bytes: bytes, length: bufferSize, encoding: encoding) 
    println("!!!Groesse: \(bufferSize) \n") 
    println("!!!!!Result: \(result)") 

    if result != nil 
    { 
     return result! 
    } 
    else 
    { 
     return "" 
    } 

我的buffersize是9999999在mo換貨和原始文件的大小是148440. 這是下載功能

let ftpReadStream = self.createFTPReadStream(fileName) 
    CFReadStreamOpen(ftpReadStream) 

    var numBytesRead = 0 
    var buffer = [UInt8](count: bufferSize, repeatedValue: 0) 

    do 
    { 
     //TODO: Buffer überlauf? 
     numBytesRead = CFReadStreamRead(ftpReadStream, &buffer, bufferSize) 
    } 
    while(numBytesRead > 0); 

    CFReadStreamClose(ftpReadStream) 
    /*var data = NSData(bytes: buffer, length: bufferSize) 
    data.writeToFile("/Users/nilskunkel/KirchnerTimeDaten/XMLs/Test.xml", options: NSDataWritingOptions.DataWritingAtomic, error: nil)*/ 
    var data = self.removePadding(buffer) 

    self.createStringFromByteArray(buffer, encoding: encoding) 

    return self.createStringFromByteArray(data, encoding: encoding) 
+0

NSXMLParser(或任何XML解析器)應該自動處理編碼... –

+0

也許對你來說是一個好主意,爲我們翻譯錯誤。 – Icaro

+0

@IcaroNZ它不是一個錯誤,它是當我嘗試對刪除0字節的字節數組進行編碼時得到的結果。 – Ailer

回答

0

你有沒有嘗試使用NSString將其轉換:

let str = NSString(bytes: utf16, length: utf16.count, encoding: NSUTF16StringEncoding) 

其中UTF-16是串您下載

+0

我用它像NSString和NSUtf16StringEncoding – Ailer

+0

你有沒有嘗試使用UInt16的UInt8? – Icaro

+0

它看起來像CFReadStreamRead函數需要uint8數組https://developer.apple.com/library/prerelease/ios/documentation/CoreFoundation/Reference/CFReadStreamRef/index.html#//apple_ref/c/func/CFReadStreamRead – Ailer

0

xml下載和編碼工作。該錯誤在我的XMLParser上。 謝謝大家的幫助