[MacOSX] NSXMLDocumet Shift-JISのXMLを読み込む
結構,まんどくさい.
どうやら,NSXMLDocumentの内部は,システムの文字コードで処理されるようなので,ちゃんと文字コードを変換してからパーサに突っ込んでやらないといけない.
また,一度でもNSStringに文字コードをシステムの文字コード以外で突っ込むと化け化けになるので,その辺もちゃんとしないといけない.
後,HTMLのようなちゃんとXML勧告に従っていないXML形式をパースする場合には,optionを指定する.optionの各形式は,こちらのページ参照.例えば,HTMLをパースするときは,NSXMLDocumentTidyHTMLになる.
- (void)hogehoge { NSData *rssData = [hoge getXMLData]; // get data format is SHIFT-JIS // convert it into UTF-8 NSString *decoded_strings = [[NSString alloc] initWithData:rssData encoding:NSShiftJISStringEncoding ]; // parse [self parseXML:decoded_strings]; } - (NSMutableArray*) parseXML:(NSString*)str { NSError *err = nil; NSXMLDocument *xmlDoc = [[[NSXMLDocument alloc] initWithXMLString:str options:NSXMLDocumentTidyHTML error:&err] autorelease]; // parsing is here }
ただし,内部的には,UTF-8?でコードされているものと思いきや,なんかよくわからない.
XML内部の日本語データを出すときは,
[NSString stringWithCString:[strTag UTF8String] encoding:NSASCIIStringEncoding];
みたいにしてやらないといけない.
面倒くさすぎる.なんじゃこれ?