0

I want to look at the display of a number of Unicodes using a forLoop. However the compiler doesn't like "%x" or "%d" in the string to build a Unicode. Is there a work around?

for (int k = 0; k < 16; k++){
    lbl.text =[NSString stringWithFormat:@"\u00B%x", k ];// <-- incomplete universal character name \u00B
}

thanks

Kristen Martinson
  • 1,829
  • 3
  • 22
  • 33

2 Answers2

5

I'm not sure a fully understand what you're trying to achieve. For this answer, I assume that you want to generate the Unicode characters int the range between B0 and BF.

Your code doesn't work due to the \u escape sequence (and not because of the %x or %d format specifiers). Just read the error message carefully. The code assumes that the %x specifier will be substituted with a number first and that the escape sequence will be evaluated second. However, it happens the other way round: First the \u sequence is evaluated by the compiler and an error thrown because it is invalid.

A better (and simpler) approach is the following code:

for (unichar ch = 0xB0; ch <= 0xBF; ch++){
    lbl.text =[NSString stringWithFormat:@"%C", ch ];
}

This code directly puts a Unicode character into the string.

Codo
  • 75,595
  • 17
  • 168
  • 206
  • Can the %C handle 32bit wide unicode such as the charcode of an emoji character? – jayatubi Apr 05 '15 at 06:56
  • I don't think though. According to the documentation, it's restricted to 16 bit. And the emoji characters are outside that range. – Codo Apr 05 '15 at 10:03
1

Use this method instead:

NSString stringWithUTF8String:

From the documentation here on the section Strings and Non-ASCII Characters:

Formatting Strings

Oscar Gomez
  • 18,436
  • 13
  • 85
  • 118