为什么直接注释编码字符串不转换为阿拉伯语?

时间:2012-06-27 10:27:20

标签: ios utf-8 arabic latin1

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 = @"اÙÙØ­ÙÙ Ùد٠ÙÙÙÙÙÙ٠رÙبÙ٠اÙÙعÙاÙÙÙ ÙÙÙÙ";

2 个答案:

答案 0 :(得分:4)

编码是ANSI的,我认为可以从任何工具将其更改为UTF-8。 例如,使用Notepad ++进行申请,然后您可以在sqlite或ios中使用编码。

答案 1 :(得分:1)

Latin1不能代表阿拉伯字符,因此您无法将该字符串编码为Latin1。阿拉伯语属于Latin4字符集。如果字符串无法无损地编码为指定的编码,则cStringUsingEncoding方法将返回null。

为什么要将阿拉伯字符串编码为LatinX? UTF-8很可能是最好的代表,因为它只使用标准字符和直接的方法,没有头痛。它可能需要比Latin4更多的字节,但在大多数情况下它将是值得的。

转换为Latin1会让你丢失文字。