2012-03-22 9 views
1

UTF8またはASCIIエンコードされたテキストを含むHTMLを取得しています。最も一般的な使用のためには、テキストを右に表示するように働くASCIIデコードです:NSDataにASCIIまたはUTF8エンコーディングが含まれていないか確認してください。

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 

は今、私はUTF8エンコーディングで別のHTMLページを持っているので、私は使用する必要があります:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

エンコーディングのどのような種類私はウェブサイトをロードするときにランダムに取得します。私の質問は、使用する権利はどのような種類のデコードのNSDataをチェックする方法ですか?だから私は使用する必要があるエンコーディングタイプを知っています。

Thnx!

答えて

4

私はNSDataののエンコーディングを確認することが可能である場合ので、これは私がやったことあるかわからない:

NSString *dataStr; 
dataStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
if (!dataStr) 
{ 
    NSLog(@"ASCII not working, will try utf-8!"); 
    dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
} 
//Do stuff with dataStr 
+0

Thnx、それはASCIIコード化されていない場合、常に文字列を返すことは本当ですか? – MiiChiel

3

Heliemの答えは有用であるがASCIIとUTF8の両方を与えた場合、それは解決策ではありません返される文字列たとえば:UTF8は私にいくつかの余分な文字(否定的な結果)を与え、ASCIIは正しい文字を表示しています(肯定的な結果)。私は今、次のコードを使用します:

NSString *responseString, *responseStringASCII, *responseStringUTF8; 

responseStringASCII = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
if (!responseStringASCII) 
{ 
    // ASCII is not working, will try utf-8! 

    responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
} 
else 
{ 
    // ASCII is working, but check if UTF8 gives less characters 

    responseStringUTF8 = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    if(responseStringUTF8 != nil && [responseStringUTF8 length] < [responseStringASCII length]) 
    { 
     responseString = [responseStringUTF8 retain]; 
    } 
    else 
    { 
     responseString = [responseStringASCII retain]; 
    } 

    [responseStringUTF8 release]; 
} 

[responseStringASCII release]; 
関連する問題