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。例如,使用 Notepad++ 应用,然后您可以在 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 回答