• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【アプリ開発】日本語を含むXMLファイル読み込み)

【アプリ開発】XMLファイル読み込みで日本語表示が文字化けしてしまう問題について

このQ&Aのポイント
  • iOSアプリ開発中にXMLファイルを読み込んで日本語を表示したいですが、文字化けしてしまいます。
  • 「iPhone/iPadアプリ開発逆引き大全500の極意」のサンプルを使用していますが、日本語文字列が正しく表示されません。
  • 解決方法を探していますが、ネットでの情報では解決できない状況です。どなたかアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zeds
  • ベストアンサー率100% (1/1)
回答No.2

ViewController.mの、clickReadを以下のように書き換えてみてください。 - (IBAction)clickRead:(id)sender { NSString *path = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"xml"]; xmlDocPtr doc = xmlParseFile([path cStringUsingEncoding:NSUTF8StringEncoding]); // XMLファイルを読み込む xmlXPathContextPtr context = xmlXPathNewContext(doc); xmlChar *xpath = (xmlChar*)[@"//person/name" cStringUsingEncoding:NSUTF8StringEncoding]; xmlXPathObjectPtr result = xmlXPathEval(xpath , context); xmlNodeSetPtr nodeset = result->nodesetval; NSMutableString *text = [NSMutableString string]; for ( int i=0; i<nodeset->nodeNr; i++ ) { xmlChar *element = xmlNodeListGetString(doc, nodeset->nodeTab[i]->children, 1); NSString* str = [NSString stringWithCString:element encoding:NSUTF8StringEncoding]; NSLog(@"str=%@",str); // << ここと [text appendFormat:@"name: %@\n", str]; // << ここ // NSLog(@"element: %s", element); // [text appendFormat:@"name: %s\n", element]; } xmlXPathFreeObject(result); xmlXPathFreeContext(context); textView.text = text; } Readボタンを押して、nameに漢字が設定されても、正しく表示されると思います。

niioroo
質問者

お礼

できました!! NSString* str = [NSString stringWithCString:element encoding:NSUTF8StringEncoding]; のところで警告が出てきましたが、 NSString* str = [NSString stringWithCString:(const char*)element encoding:NSUTF8StringEncoding]; に訂正すると警告も無く動作して日本語も表示されました。 本当にありがとうございました。 大変感謝しておりますm(__)m

その他の回答 (1)

  • jppy
  • ベストアンサー率14% (14/99)
回答No.1

書き換えた【persons.xml】ファイルを、encoding="utf-8"で保存していますか?

niioroo
質問者

補足

encoding="utf-8"で保存はしているかどうかはわかりません.... Xcode上で開いて修正して保存しているだけなので.... 何か別のアプリケーションで開いてちゃんとencoding="utf-8"保存しないといけないのでしょうか? 試しにmacのテキストエディタで開いて修正して保存してもダメでした。 テキストエディタの環境設定でエンコーディングは「Unicode(UFT-8)」になっていました。 たぶん、encoding="utf-8"で保存されているとは思うんですが....