![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_11.png?e8efa67)
iOSアプリ開発しています。(iOS5 SDK/Xcode4.3/Objective-C)
XMLファイル(日本語を含む)を読み込みそれを表示さたいのですが文字化けしてしまい困っています。
今、私が試しているのは「iPhone/iPadアプリ開発逆引き大全500の極意」という書籍のサンプルの中の「XMLファイルを読み込む」というサンプルです。サンプルだとXMLファイルで読み込む文字列はアルファベットなのでちゃんとうごいて文字化けせずに表示もされます。ですが、xmlファイルの読み込みたい文字列を日本語にすると「ÅÏ∞‰æ」のような感じで文字化けしてしまいます。
このサンプルのxmlファイル読み込みにはxmlParseFile関数、libxml2を使用していて、XMLファイル(persons.xml)を読み込んでUITextViewに表示するプログラムです。
サンプルのxmlファイル内にある文字列「masuda tomoaki」「yamada taro」「tanaka ziro」をそれぞれ「松田」「山田」「田中」と書き換えて保存してアプリを実行すると文字化けします。
他にどこか書き換えないといけないのでしょうか?
↓サンプルコードを付けています。
どうしたら日本語も読み込めるようになるか、どなたかアドバイスをお願いします。ネットで何日もかけて調べても解決できなかったのでどうか助けてください。
何卒よろしくお願いします。
↓「iPhone/iPadアプリ開発逆引き大全500の極意」のサンプルダウンロードページ(この中のBasic195)
http://www.shuwasystem.co.jp/support/7980html/33 …
以下、サンプルのコード「ViewController.h」「ViewController.m」「persons.xml」です。
【ViewController.h】
#import <UIKit/UIKit.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
@interface ViewController : UIViewController
{
IBOutlet UITextView *textView;
}
- (IBAction)clickRead:(id)sender;
@end
【ViewController.m】
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (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);
NSLog(@"element: %s", element);
[text appendFormat:@"name: %s\n", element];
}
xmlXPathFreeObject(result);
xmlXPathFreeContext(context);
textView.text = text;
}
@end
【persons.xml】
<?xml version="1.0" encoding="utf-8" ?>
<persons>
<person id="01">
<name>masuda tomoaki</name>
<age>43</age>
<address>tokyo</address>
</person>
<person id="02">
<name>yamada taro</name>
<age>30</age>
<address>oosaka</address>
</person>
<person id="03">
<name>tanaka ziro</name>
<age>20</age>
<address>hokkaido</address>
</person>
</persons>
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に漢字が設定されても、正しく表示されると思います。
![「【アプリ開発】日本語を含むXMLファイル」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/28098450_5497ea207400e/M.jpg)
できました!!
NSString* str = [NSString stringWithCString:element encoding:NSUTF8StringEncoding];
のところで警告が出てきましたが、
NSString* str = [NSString stringWithCString:(const char*)element encoding:NSUTF8StringEncoding];
に訂正すると警告も無く動作して日本語も表示されました。
本当にありがとうございました。
大変感謝しておりますm(__)m
No.1
- 回答日時:
書き換えた【persons.xml】ファイルを、encoding="utf-8"で保存していますか?
この回答への補足
encoding="utf-8"で保存はしているかどうかはわかりません....
Xcode上で開いて修正して保存しているだけなので....
何か別のアプリケーションで開いてちゃんとencoding="utf-8"保存しないといけないのでしょうか?
試しにmacのテキストエディタで開いて修正して保存してもダメでした。
テキストエディタの環境設定でエンコーディングは「Unicode(UFT-8)」になっていました。
たぶん、encoding="utf-8"で保存されているとは思うんですが....
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) Android Studio 難しい 4 2023/06/18 22:27
- その他(プログラミング・Web制作) パイソン初心者です 4 2022/06/29 06:49
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8でエンコーディングとはど...
-
【アプリ開発】日本語を含むXML...
-
eclipseへのxmlファイル追加
-
ExcelVBAで書き出した文字が化ける
-
VBSでXMLを読込、検索結果をテ...
-
XMLで要素が記述された順番に意...
-
XMLファイル内のデータ(値)を変...
-
VBSでxmlの値を書き換えたい
-
CPUの考え方を教えてください ...
-
Access VBAでXMLが読み込めない
-
東芝のDynabookなのですがアン...
-
XMLを出力する時のエラー原因
-
XML、XSLTの適応エラー(IEから...
-
ツリービューのノードをダブル...
-
XPathで途中に名前空間が設定さ...
-
vbsのDOMDocumentで要素のText...
-
XMLDocumentでスキーマを無視し...
-
ルート要素ノードが2個ある場合?
-
VB.NETで最後フォのフォ...
-
MSXMLで使用可能な文字コードの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでテキストファ...
-
UTF-8でエンコーディングとはど...
-
DOSコマンドラインからxmlファ...
-
GoogleマップでKMLが読み込めない
-
ExcelVBAで書き出した文字が化ける
-
C#で使用中のファイルに別のフ...
-
XMLファイルの作り方がわかりま...
-
eclipseへのxmlファイル追加
-
XHTMLの拡張子
-
VBAでxmlファイルの置換をしたい
-
複数のXMLファイルからデータを...
-
NEXUS7でSecret No5の使い方
-
ホームページビルダー19で作...
-
Windowsで見かけるxmlファイル...
-
Excel(2007以降)をxml形式に変...
-
質問
-
XMLデータを整形して、ブラウザ...
-
DataSetのwriteXmlでのXML宣言
-
ザウルスSL-860でのKeyHelperAp...
-
サイトマップとは何でしょうか?
おすすめ情報