2

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

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

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

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

提前致谢 :)

4

4 回答 4

3

如果你想在 Objective-C 中处理 Unicode,你应该使用NSString而不是char类型。NSString设置为处理 Unicode。

用于characterAtIndex循环字符串

for (characterIndex = 0; characterIndex < [myString length]; characterIndex++)
{
    unichar testCharacter = [myString characterAtIndex:characterIndex];
    // do stuff
}
于 2010-10-30T17:28:24.770 回答
2

字符查看器告诉我你的字符是 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"];
于 2010-10-30T17:58:16.323 回答
1
  1. 你试过了unichar吗?无论编码如何,简单char都不起作用,它太小了。

  2. 你真的需要使用单个字符吗?NSString不行?

  3. 那是什么样的加密?你不能不管字节流的意义加密它们吗?

于 2010-10-30T17:26:21.277 回答
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
于 2010-10-30T20:20:20.883 回答