NSXMLParser: unexpected result with non-ASCII characters

I am trying to upload XML data via REST web services. I already created a parser with NSXMLParser and visualized the data in a TableView.

I have problems when I meet in sentences of an XML document with an accent.

In some studies, I found this very similar to my problem and tried to implement it:

func parse(handler: () -> Void) {
    self.handler = handler
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        self.countCategoryScheme = 0
        var url = NSURL(string: SomeStructure.firstLink);
        var err:NSError = NSError()
        var dataString: String = String(contentsOfURL: url!, encoding: NSUTF8StringEncoding, error: nil)!
        var data: NSData = dataString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        let parser = NSXMLParser(data: data)
        let resulset = NSString(data: data, encoding: NSUTF8StringEncoding)
        println(resulset)
        parser.delegate = self;
        parser.parse();
        if !parser.parse() {
            self.delegate?.XMLParserError(self, error: "I Parse Error")
            println("I Parser error")
        }
    }
}

in println (resulset)I print the whole XML file, correctly decoded.

The problem is when I run the parser, accented characters are not readable

This is the code when I found the characters in the parser:

   func parser(parser: NSXMLParser!, foundCharacters string: String!) {
        myList[position] = string
    }

EDIT:

This is an example of my document:

<Name xml:lang="en" xmlns="">National Accounts</Name>

<Name xml:lang="it" xmlns="">Contabilitร  nazionale</Name>

In println (), print the document correctly as described above.

, , carachter, "" :

"Contabilit"

+1
1

parser:foundCharacters: , XML. "Contabilit" "ร  nazionale".

didStartElement didEndElement.

, . , , XML.

:

var currentElement : String?

:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {

    // If a "Name" element started (which you are interested in), set
    // currentElement to an empty string, so that the found characters
    // can be collected. Otherwise set it to nil.
    if elementName == "Name" {
        currentElement = ""
    } else {
        currentElement = nil
    }

}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {

    // If the "Name" element ended, get the collected string and
    // append it to your list.
    if elementName == "Name" {
        if let name = currentElement {
            println(name)
            myList.append(name)
        }
    }
    currentElement = nil
}

func parser(parser: NSXMLParser, foundCharacters string: String?) {

    // If currentElement is not nil, append the found characters to it:
    currentElement? += string ?? ""
}
+2

All Articles