KissXML xmlParseMemory 解析中文返回nil

做項目時,在解析含有中文信息的XML數據時,總是時不時返回nil。
斷點定位到 xmlParseMemory([data bytes], (int)[data length]); 這個方法上。
解析不對一般應該編碼的問題。所以,找一個能夠指定編碼的方法替代他就可以了。

下面是我修改過的代碼:

- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error
{
    if (data == nil || [data length] == 0)
    {
        if (error) *error = [NSError errorWithDomain:@"DDXMLErrorDomain" code:0 userInfo:nil];
        return nil;
    }
    // Even though xmlKeepBlanksDefault(0) is called in DDXMLNode's initialize method,
    // it has been documented that this call seems to get reset on the iPhone:
    // http://code.google.com/p/kissxml/issues/detail?id=8
    // 
    // Therefore, we call it again here just to be safe.
    xmlKeepBlanksDefault(0);
    
    /** 下邊注釋的方法是這里原有的方法,這個方法是我加的,因為返回數據編碼的是GBK的,所以只能指定編碼解析XML數據 */
    xmlDocPtr doc = xmlReadMemory([data bytes],(int)[data length],NULL,"gbk",XML_PARSE_RECOVER);
//  xmlDocPtr doc = xmlParseMemory([data bytes], (int)[data length]);
    if (doc == NULL)
    {
        if (error) *error = [NSError errorWithDomain:@"DDXMLErrorDomain" code:1 userInfo:nil];
        return nil;
    }
    
    return [self initWithDocPrimitive:doc owner:nil];
}

修改過后,果然可以了。
這個方法應該可以應付不同編碼的XML數據了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,552評論 25 708
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,353評論 0 16
  • 1. 早上本來應該8點起來的,結果一頭栽下去,做了一個很長的武俠夢,睡到10點多,錯過了公司那邊的快遞的兩個電話。...
    土豆炒地瓜閱讀 312評論 0 0