0

UTF-8 でエンコードされた XML ファイルからデータを取得し、すべての要素を UITableView に表示したいと考えています。セルのサイズを同じにして、最初の 2 行のテキスト行を可能な限り多くのデータで表示したいので、キャリッジ リターンを削除しようとしました。

私の cellForRow メソッドでは、これを変更しました:

[[myCell textLabel] setText:data];

に :

[[myCell textLabel] setText:[self correctData:data]];

ここに私の correctData メソッドがあります:

- (NSString *) correctData : (NSString *) str
{
    NSMutableString *res = [NSMutableString stringWithFormat:@""];
    for(int i = 0 ; i < [str length] ; i++)
    {
        char car = [str characterAtIndex:i];
        if(car != 10 && car != 13) 
           [res appendString:[NSString stringWithFormat:@"%c",car]];
    }
    return res;
}

これにより、改行が正しく削除されますが、UTF-8 文字も変更されます。たとえば、最初の文字列 (str) の一部:

ディプロメ(e) デタット

そして、この関数では次のようになります。

DiplÙmÈ(e) d'Etat

私は何をすべきか ?ありがとう。

4

1 に答える 1

4

NSStringunicharは、16 ビットに格納されている文字で動作しますが、char長さはわずか 8 ビットです。unicharanを aに変換すると、charより上のコード ポイントを持つすべての文字が変更されU+00FFます。

この問題は、とcharに置き換えることで解決できます。unichar%c%C

編集:しかし、それは本当に効率的ではありません。正規表現を使用して、すべての改行文字を一度に置き換えることをお勧めします。

str = [str stringByReplacingOccurrencesOfString:@"[\r\n]+"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                           range:NSMakeRange(0, str.length)];
于 2012-06-06T12:49:14.430 に答える