2010-09-28 57 views
2

我有ASIHttpRequest的編碼問題。當我得到一個URL時,除了一點編碼問題之外,數據會被完美地返回。ASIHttpRequest的編碼問題

這是我的代碼:

- (void)fetchGamesForCategory 
{ 
    NSString *url_string = [[NSString alloc] initWithFormat:url_match, theCategory._id]; 

    NSURL *url = [NSURL URLWithString:url_string]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request startSynchronous]; 

    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 

     NSLog(@"response: %@", response); 

     NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding]; 

     NSString *errorDesc = nil; 
     NSPropertyListFormat format; 
     NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization 
               propertyListFromData:data 
               mutabilityOption:NSPropertyListMutableContainersAndLeaves 
               format:&format 
               errorDescription:&errorDesc]; 

     NSDictionary *categoryListPathDictionary = [[NSDictionary alloc] initWithDictionary:dict]; 

     categoryMatchList *categoryMatchListFile = [[[categoryMatchList alloc] initWithDictionary:categoryListPathDictionary] retain]; 
     matchArray = [categoryMatchListFile getMatchListXmlSet]; 

     [self loadPage]; 
    } 
} 

這是我的結果:

2010-09-28 21:49:35.970 oddsApp[46429:190f] response: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist> 
    <dict> 
     <key>matches</key> 
     <array> 
      <dict> 
       <key>name</key> 
       <string>Gais - Häcken</string> 
       <key>date</key> 
       <string>2010-09-29 18:00</string> 
       <key>id</key> 
       <string>156</string> 
       <key>odds</key> 
       <dict> 
        <key>1</key> 
        <string>2.6</string> 
        <key>X</key> 
        <string>3.28</string> 
        <key>2</key> 
        <string>2.862</string> 
       </dict> 
      </dict> 
     </array> 
    </dict> 
</plist> 

正如你所看到的,編碼在<string>Gais - Häcken</string>搞砸了,allthough它顯示的頁面時是正確的在瀏覽器中: FireFox screenshot

有人知道什麼是錯的嗎?

+3

ASIHTTPRequest中的可愛評論:「//如果內容類型標頭指定編輯一個編碼,我們將使用它,否則我們使用defaultStringEncoding(默認爲NSISOLatin1StringEncoding)「。對於HTTP(文本編碼默認爲ISO-8859-1),這在技術上是正確的,但不符合其他人的操作。你可以做'[request setResponseEncoding:NSUTF8StringEncoding]',但這有點破解。 – 2010-09-28 23:57:05

+0

是的,我讀到了,但我想我對它不夠了解。我搜索了一個「setEncoding」,但現在我知道爲什麼我沒有找到任何。謝謝。 – 2010-09-29 07:58:54

回答

8

如果您不首先將響應轉換爲字符串,該怎麼辦?

NSData *data = request.responseData; 
+0

好主意,我會的。 – 2010-09-29 08:02:32

+1

好主意,但你對數據做了什麼?我找回一個JSON對象,顯示損壞的值。 – bashan 2011-12-29 22:14:53

+0

若要string:NSString * responceString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; – 2013-02-17 18:21:13

0

夥計們,我tryied所有,並沒有成功:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:self.urlString]]; 
request.delegate = self; 
[request setDefaultResponseEncoding:NSUTF8StringEncoding]; 
[request setResponseEncoding:NSUTF8StringEncoding]; 
[request setRequestMethod:@"PUT"]; 
[request addRequestHeader:@"Accept" value:@"application/xml"]; 
[request addRequestHeader:@"Content-Type" value:@"application/xml; charset=UTF-8;"]; 

難道有人solce與編碼同樣的問題? alt text

+0

您的數據是URLEncoded,而不是UTF8編碼的。使用字符編碼會導致「Häcken」而不是「Häcken」。你需要URLDecode你的數據。不知道如何。 – 2010-11-09 09:10:49

+0

我可能做[.. stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]); ,但實際上它不是百分之百。任何其他想法? – slatvick 2010-11-09 17:38:14

+0

有沒有人找到解決這個問題? – Slee 2013-02-14 19:18:25