1

以下のように % エスケープされた文字列をデコードしたい。

%E7%89%9B%E4%B9%B3%E3%81%8C%E7%BE%8E%E5

Web API を介して、日本語の文字列を含む xml データを取得します。このアプリは NSURLConnection で受け取りました。したがって、データは以下の方法で受信されました。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSString *xml = [[NSString alloc] initWithData:receivedData encoding:encoding];
    NSData *xmlData = [[xml stringByReplacingPercentEscapesUsingEncoding:encoding]
                       dataUsingEncoding:encoding];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
    [parser setDelegate:self];
    [parser parse];
}

ただし、この xmlData には、日本語のエスケープ文字列ではなく、英語のアルファベット文字列のみが含まれています。そのため、xmlData から日本語の文字列データを取得できません。

本来、この xmlData は

<?xml version="1.0" encoding="UTF-8" ?><ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"><ma_result><total_count>3</total_count><filtered_count>3</filtered_count><word_list><word><surface>夏&lt;/surface><reading>なつ</reading><pos>名詞</pos></word><word><surface>は&lt;/surface><reading>は&lt;/reading><pos>助詞</pos></word><word><surface>あつい&lt;/surface><reading>あつい&lt;/reading><pos>形容詞&lt;/pos></word></word_list></ma_result></ResultSet>    

しかし今 xmlData は

<?xml version="1.0" encoding="UTF-8" ?><ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1_list></ma_result></ResultSet>

stringByReplaceingPercentEscapesUsingEncoding メソッドは日本語のデータを省略していると思いますね。解決方法を教えてください。

4

0 に答える 0