4
NSString * string  = @"االْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ";
    const char *c = [string cStringUsingEncoding:NSUTF8StringEncoding];

    NSString *newString = [[NSString alloc]initWithCString:c   encoding:NSISOLatin1StringEncoding];
     NSLog(@"%@",newString);


//    NSString * staticEncodedString = @"اÙÙØ­ÙÙ ÙØ¯Ù ÙÙÙÙÙÙÙ Ø±ÙØ¨Ù٠اÙÙØ¹ÙاÙÙÙ ÙÙÙÙ";
    const char *cvvv = [newString cStringUsingEncoding:NSISOLatin1StringEncoding];
    NSString *newStringV = [[NSString alloc]initWithCString:cvvv  encoding:NSUTF8StringEncoding];
  NSLog(@"%@",newStringV);

直接コメントされたエンコードされた文字列がアラビア語に変換されないのはなぜですか? アラビア語をハードコードすると、エンコードしてから正しくデコードできますが、静的にエンコードされた文字列をアラビア語で読み取れないのはなぜですか?

返信ありがとうございます。はい、「staticEncodedString」のデコード中にデータを失います。しかし、次の文字列をデコードしてアラビア語に戻すだけです。

 NSString * staticEncodedString = @"اÙÙØ­ÙÙ ÙØ¯Ù ÙÙÙÙÙÙÙ Ø±ÙØ¨Ù٠اÙÙØ¹ÙاÙÙÙ ÙÙÙÙ";
4

2 に答える 2

5

エンコードはANSIで、ツールからUTF-8に変更すると思います。たとえば、メモ帳++を使用して適用すると、sqliteまたはios内でエンコードを使用できます。

于 2012-06-28T10:39:48.733 に答える
1

Latin1はアラビア文字を表すことができないため、その文字列をLatin1にエンコードすることはできません。アラビア語はLatin4文字セットに属しています。文字列を指定されたエンコーディングにロスレスでエンコードできない場合、メソッドcStringUsingEncodingはnullを返します。

なぜアラビア語の文字列をLatinXにエンコードしたいのですか?UTF-8は、標準の文字のみを使用し、頭痛の種のない単純なアプローチを使用しているため、おそらく最良の表現になります。Latin4よりも少し多くのバイトが必要になる場合がありますが、ほとんどの場合、それだけの価値があります。

Latin1に変換すると、テキストが失われます。

于 2012-06-27T10:56:03.633 に答える