我在ios中使用了一些需要通过unicode字符串识别图标的字体图标。我希望能够将我的服务器中的代码作为JSON进行检索,并动态创建此unicode字符串以检索字体图标并放入标签等。但是我无法进行转换。基于以下代码的任何想法?
工作示例在这里,其中" E539"是从服务器收到的字符串。我可以对它进行硬编码并且可以正常工作,但动态创建并不是那么容易。
[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\uE539"]];
这些类型的东西不起作用:
[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\u%@", @"E539"]];
[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\\u%@", @"E539"]];
我有一个我在这里找到的课程,它将采用UTF32Char制作unicode。这条线有效,但不是整个解决方案。
[iconLabel materialIconWithUnicodeStr:[EntypoStringCreator stringForIcon:0xE539]]
尝试将它拼凑在一起,而不是盲目地从我发现的代码,几乎可以工作,但创建了错误的unicode。我不明白为什么。
NSString *unicodeStr = @"E539";
// attempt to convert E539 -> 0xE539
UTF32Char outputChar;
if ([unicodeStr getBytes:&outputChar maxLength:4 usedLength:NULL encoding:NSUTF32LittleEndianStringEncoding options:0 range:NSMakeRange(0, 1) remainingRange:NULL]) {
outputChar = NSSwapLittleIntToHost(outputChar); // swap back to host endian
// outputChar now has the first UTF32 character
}
// this does not give the correct icon at all
[iconLabel [EntypoStringCreator stringForIcon:outputChar]];
答案 0 :(得分:3)
您的materialIconWithUnicodeStr:
方法正在查找其中编码了实际unicode字符的字符串。您的示例可以实现此目的,因为转义序列在编译时工作以生成字符。您的示例不起作用,因为\ u转义是一个编译时转义,在运行时不起作用,无论您如何格式化或双重转义它。
您需要一种方法在运行时从您拥有的十六进制值中获取unicode字符:
unsigned c = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"E539" ];
[scanner scanHexInt: &c];
NSString* unicodeStr = [NSString stringWithFormat: @"%C", (unsigned short)c];
[iconLabel materialIconWithUnicodeStr: unicodeStr];