我是 Obj-C 的新手(我的经验是 Java 和一点 C)
这些天我有这个项目,这是一个阿拉伯语文本加密..我需要读取一个阿拉伯语文本文件(逐个字符),但是当我想使用这些字符并将它们存储在变量(char类型)中时,我不能't .. 它在这一行给了我这个警告“多字符字符常量”:
字符 c = 'ب'; // 这里我试图将字母“Bah”存储在 char 变量中
我认为这是一个编码问题,但我不知道究竟是什么问题,我花了最后 2 天寻找解决方案,但找不到一个:( ..
提前致谢 :)
我是 Obj-C 的新手(我的经验是 Java 和一点 C)
这些天我有这个项目,这是一个阿拉伯语文本加密..我需要读取一个阿拉伯语文本文件(逐个字符),但是当我想使用这些字符并将它们存储在变量(char类型)中时,我不能't .. 它在这一行给了我这个警告“多字符字符常量”:
字符 c = 'ب'; // 这里我试图将字母“Bah”存储在 char 变量中
我认为这是一个编码问题,但我不知道究竟是什么问题,我花了最后 2 天寻找解决方案,但找不到一个:( ..
提前致谢 :)
如果你想在 Objective-C 中处理 Unicode,你应该使用NSString
而不是char
类型。NSString
设置为处理 Unicode。
用于characterAtIndex
循环字符串
for (characterIndex = 0; characterIndex < [myString length]; characterIndex++)
{
unichar testCharacter = [myString characterAtIndex:characterIndex];
// do stuff
}
字符查看器告诉我你的字符是 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"];
你试过了unichar
吗?无论编码如何,简单char
都不起作用,它太小了。
你真的需要使用单个字符吗?NSString
不行?
那是什么样的加密?你不能不管字节流的意义加密它们吗?
我建议你使用 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