【问题标题】:ios - dynamically create and display unicode stringsios - 动态创建和显示 unicode 字符串
【发布时间】:2014-09-14 18:55:42
【问题描述】:

我有一个UILabel,我想在其中显示一个 Unicode 字符。以下作品:

label.text = @"\U000025A0";

现在我想从十进制数动态生成Unicode字符,如下所示:

label.text = NSString stringWithFormat:@"\U%08x",9632];

Xcode 编译器失败并出现以下错误:

\U used with no following hex digits

有没有办法将十进制数 9632 转换为 Unicode,然后在 UILabel 中显示?

【问题讨论】:

  • 使用+ [NSString stringWithCharacters:length:]。不要忘记 NSString 无法处理的代理对,可悲且令人无法接受。

标签: ios string unicode hex decimal


【解决方案1】:

试试这个 ::

NSString *myString = [NSString stringWithUTF8String:"0xF09F948A"]; <-- UTF-8 Hexadecimal Encoding

myLabel.text = myString;

【讨论】:

  • 这没有回答问题。 想想。
【解决方案2】:

我在显示 entypo 字体特殊字符时遇到了同样的问题,所以我实现了自己的 EntypoStringCreator 类(在 SO 的帮助下)。以下是用于将 unicode 数字转换为 nsstring 的方法:

.h

@interface EntypoStringCreator : NSObject

+(NSString *)stringForIcon:(UTF32Char)char32;

@end

.m

@implementation EntypoStringCreator


+(NSString *)stringForIcon:(UTF32Char)char32
{
    if ((char32 & 0xFFFF0000) != 0)
        return [self stringFromUTF32Char:char32];
    else
        return [self stringFromUTF16Char:(UTF16Char)(char32&0xFFFF)];
}

+(NSString *)stringFromUTF32Char:(UTF32Char)char32
{
    char32 -= 0x10000;
    unichar highSurrogate = (unichar)(char32 >> 10); // leave the top 10 bits
    highSurrogate += 0xD800;
    unichar lowSurrogate = char32 & 0x3FF; // leave the low 10 bits
    lowSurrogate += 0xDC00;
    return [NSString stringWithCharacters:(unichar[]){highSurrogate, lowSurrogate} length:2];
}

+(NSString *)stringFromUTF16Char:(UTF16Char)char16
{
    return [NSString stringWithCharacters:(unichar[]){char16} length:1];
}


@end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 2012-05-10
    • 1970-01-01
    • 2015-01-23
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多