【发布时间】:2010-12-19 01:14:49
【问题描述】:
我有一个国际字符存储在一个 unichar 变量中。此字符不是来自文件或 url。变量本身只存储一个无符号的 short(0xce91),它是 UTF-8 格式并转换为希腊大写字母“A”。我试图将该字符放入 NSString 变量中,但我失败了。
我尝试了 2 种不同的方法,但都失败了:
unichar greekAlpha = 0xce91; //could have written greekAlpha = 'Α' instead.
NSString *theString = [NSString stringWithFormat:@"Greek Alpha: %C", greekAlpha];
不好。我得到了一些奇怪的汉字。作为旁注,这与英文字符完美配合。
然后我也尝试了这个:
NSString *byteString = [[NSString alloc] initWithBytes:&greekAlpha
length:sizeof(unichar)
encoding:NSUTF8StringEncoding];
但这也不起作用。 我显然做错了什么,但我不知道是什么。 有人能帮助我吗 ? 谢谢!
【问题讨论】:
-
您可以通过按编辑器工具栏中的小按钮 101010 来格式化代码以获得更好的格式。
-
感谢您告诉我 :)
-
您确定
unichar是此处使用的正确数据类型吗?以用于 UTF-16 的类型存储 UTF-8 数据是错误的。正如 Jon Jardine 所指出的,有 UTF-8 字符长于 16 位......你也可以使用 NSString 作为单个字符吗(NSString greekAlpha = @"Α"然后在stringWithFormat中使用 %@)? -
0xce91 实际上是“HANGUL SYLLABLE KAEG”的Unicode,所以我不明白为什么你会期望从中得到一个字母字符。您似乎对 UTF-8 中的 0xc9、0x91 拉丁小写字母 ALPHA 感到困惑。完全不同的编码。 Unicode 值为 0x0251。
标签: objective-c unicode nsstring