我是Obj-C的新手(我的经验是Java和一点C)
这些天我有这个项目,这是一个阿拉伯语文本加密..我需要读取阿拉伯语文本文件(逐个字符),但是当我想使用这些字符并将它们存储在变量中时(char类型) )我不能......它在这一行上给了我这个警告“多字符字符常量”:
char c ='ب'; //这里我试图将字母“Bah”存储在char变量
中我认为这是一个编码问题,但我不知道究竟是什么问题,我花了最近2天寻找解决方案,但找不到一个:( ..
提前致谢:)
答案 0 :(得分:3)
如果要在Objective-C中处理Unicode,则应使用NSString
代替char
类型。设置NSString
以处理Unicode。
使用characterAtIndex
与loop 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)
您尝试unichar
了吗?无论编码如何,简单char
都不会起作用,它太小了。
您真的需要使用单个字符吗? NSString
不会这样做?
那是什么样的加密?无法对字节流进行加密,无论其含义如何?
答案 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