【问题标题】:create NSString UTF8/Unicode character from int >127从 int >127 创建 NSString UTF8/Unicode 字符
【发布时间】:2014-06-07 11:29:07
【问题描述】:

我想从 >127 的 int 值创建字符。

例如:我计算 133,我想要字符 Å
或者我计算 149 并且我想要字符 Õ

(见http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec

我使用下面的代码,它没有返回正确的字符:

int pos = 133;    
NSString *TF = [NSString stringWithFormat:@"%c", pos];

这是因为 int >127 所以它不是常规的 ASCII(可以用 %c 完成)

%C 也不起作用。

我需要一些编码吗?还是stringWithFormat 中的其他运算符? 我看过CFString 类,但我不明白如何在这里使用它以及它是否适用。

【问题讨论】:

    标签: objective-c unicode nsstring


    【解决方案1】:

    133 对字符 Å 进行编码时使用的是什么编码?

    来自网站

    Unicode                UTF-8
    code point  character  (dec.)   name
    U+00C5      Å          195 133  LATIN CAPITAL LETTER A WITH RING ABOVE
    

    133 不是有效值,您想要的值是:195 133(两个字节)。 UTF8 对于最多 127 个字符只有一个字节。

    char utf8[2] = {195, 133};
    NSString *s = [NSString stringWithUTF8String:utf8];
    NSLog(@"s: '%@'", s);
    

    NSLog 输出:

    s: 'Å'

    来自网页的代码点是 U+00C5,使用 UTF32:

    u_int32_t bytes = 0x00C5;
    NSString *s = [[NSString alloc] initWithBytes:&bytes length:4 encoding:NSUTF32LittleEndianStringEncoding];
    NSLog(@"s: '%@'", s);
    

    NSLog 输出:

    s: 'Å'

    【讨论】:

    • 还没有任何编码,没有任何效果。现在有了 NSNEXTSTEPStringEncoding,133 就可以了!但是现在,当我用 154 测试它时,我创建了字符 Ü,但我需要 Ú。好奇怪....我使用的示例来自 UTF8 数据的网站...
    • 总有一个编码。编码指定与值关联的字符。高于 127(十进制)的值不是标准 ASCII,因此是非标准的,字符因平台而异。网站的链接是什么?为什么要指定十进制数大于 127 的字符?如果您必须使用 Unicode 代码点。
    • 网址:查看原帖中的链接:utf8-chartable.de/unicode-utf8-table.pl?utf8=dec。如果我可以将 int 转换为 Unicode 值再转换为 String 字符,那也将是完美的!但是我该怎么做呢?
    • 从那个站点 133 不是一个有效值,你想要的值是:195 133。UTF8 对于最多 127 的字符只有一个字节。请参阅更新的答案。
    • 终于,成功了!诀窍是不要使用 [NSString stringWithFormat:@"%c", pos];但是 [NSString appendFormat:@"%c", pos];唯一的问题是 0。U+0000 的字符不起作用。有什么建议吗?
    猜你喜欢
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2016-07-03
    • 2016-11-02
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多