如何处理Obj-C中的字符编码?

时间:2010-10-30 17:21:40

标签: objective-c encryption unicode encoding arabic

我是Obj-C的新手(我的经验是Java和一点C)

这些天我有这个项目,这是一个阿拉伯语文本加密..我需要读取阿拉伯语文本文件(逐个字符),但是当我想使用这些字符并将它们存储在变量中时(char类型) )我不能......它在这一行上给了我这个警告“多字符字符常量”:

char c ='ب'; //这里我试图将字母“Bah”存储在char变量

我认为这是一个编码问题,但我不知道究竟是什么问题,我花了最近2天寻找解决方案,但找不到一个:( ..

提前致谢:)

4 个答案:

答案 0 :(得分:3)

如果要在Objective-C中处理Unicode,则应使用NSString代替char类型。设置NSString以处理Unicode。

使用characterAtIndexloop through the string

for (characterIndex = 0; characterIndex < [myString length]; characterIndex++)
{
    unichar testCharacter = [myString characterAtIndex:characterIndex];
    // do stuff
}

答案 1 :(得分:2)

chracter viewer告诉我你的角色是unicode号码0x628。存储在一个只有8位的字符中太大了。好消息是它适合于unichar所以:

unichar c = 'ب';

可能会奏效。但编译器不保证能够处理有限字符集之外的字符。为了安全起见,您可能希望显式使用UTF-16编码(这是NSStrings内部使用的。所以:

unichar c = 0x628; // Arabic Beh (UTF-16)

或者如果你更喜欢UTF-8,那个unicode号码的UTF-8编码是D8 A8:

char c[2] = { 0xD8, 0xA8 };  // Arabic Beh (UTF-8)

编辑:

将角色转换为NSString的一些方法:

使用-stringWithFormat:

NSString* foo = [NSString stringWithFormat: @"beh %C", (unichar) 0x628];

NSString* foo = [NSString stringWithUTF8String: "beh \xD8\xAB"];

答案 2 :(得分:1)

  1. 您尝试unichar了吗?无论编码如何,简单char都不会起作用,它太小了。

  2. 您真的需要使用单个字符吗? NSString不会这样做?

  3. 那是什么样的加密?无法对字节流进行加密,无论其含义如何?

答案 3 :(得分:0)

我建议你使用NSData。 所以,你需要的只是从NSString接收NSData对象, 然后请求它的字节,编码它们, 写下来。 下一个。 从该数据加载,解码和构造NSString。 以下是有用的方法:

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding// for NSString
- (const void *)bytes// for NSData
- (void *)mutableBytes// if you prefer work with NSMutableData constructed from NSData with mutableCopy method
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding// to restore NSString back when decoding