【发布时间】:2012-05-12 21:39:37
【问题描述】:
对于 iOS 中的 Objective-C:
如果我有一个字符串,我如何读取单个字符的 unicode 数值?
例如,如果我的字符串是:“Δ”那个 unicode 字符是 U+0394,那么我如何读取字符串,找出“0394”然后创建一个新字符串,并在该值上添加 100,所以新字符串将是字符 U+0494 或“ҕ”
谢谢!
【问题讨论】:
标签: ios unicode character-encoding numeric
对于 iOS 中的 Objective-C:
如果我有一个字符串,我如何读取单个字符的 unicode 数值?
例如,如果我的字符串是:“Δ”那个 unicode 字符是 U+0394,那么我如何读取字符串,找出“0394”然后创建一个新字符串,并在该值上添加 100,所以新字符串将是字符 U+0494 或“ҕ”
谢谢!
【问题讨论】:
标签: ios unicode character-encoding numeric
首先,您的逻辑存在谬误。 ∆ + 100 != ҕ。 Unicode 以 base-16(十六进制)计算,因此“Δ”实际上等于十进制的 916,而不是 394。因此,0x0494 - 0x0394 = 0x0100 等于 256。
考虑到这一点,您的代码应如下所示:
unichar delta = 0x0394;
unichar weirdB = delta + 0x0100;
NSString *deltaStr = [NSString stringWithCharacters:&delta length:1];
NSString *weirdBString = [NSString stringWithCharacters:&weirdB length:1];
【讨论】:
-intValue 不会为 unicode 字符返回正确的值。请记住这一点,并尽可能更改接受的答案。
NSString *c = [NSString stringWithFormat:@"%C", unicodeValue];
int unicode = [c intvalue];
// then create a new one
unicode+=100;
// create a unicode value again
NSString *uniString = [NSString stringWithCharacters:(unichar *)&unicode length:1];
【讨论】:
-intValue,而不是-intvalue。其次,-intValue 在非数字字符'0' - '9' 上返回零。最后,花点时间阅读我的答案并解释 OP 是如何不正确的,然后再投反对票。 Downvotes 应该保留给错误的答案,不要因为我告诉你你的答案不正确而生我的气。
-intValue 不适用于 unicode 字符!