2015-07-31 3 views
1

При написании строкового литерала iOS встречается странный вопрос. Это Invaild универсальный character.The следующий код:"Invaild универсальный символ" для iOS?

NSString *str = @"\ud83d\udc4d"; // Prompt error: Invaild universal character 

Но, следующий код нормально:

NSString *str = @"\u2614\ufe0f"; 

Почему?

Кроме того, я обнаружил, что до тех пор, пока это ошибка \ ud8xx, \ ud9xx, \ udexx, \ udfxx.

Что это за причина?

+0

Исследования определения UTF8. Символы символов '\ u' интерпретируются как символы ASCII/UTF8, а не UTF16/32. Любой символ UTF8, начинающийся с '\ udXXX', является специальным кодом в UTF8. –

+0

@HotLicks '\ u' обозначает скалярное значение Unicode и не имеет ничего общего с UTF-8/16/32. –

+0

Да, ты прав. '\ xNN' будет стандартным шестнадцатеричным литералом ASCII/UNICODE. Я немного ржавчу на этих побегах. –

ответ

1

управляющих последовательности Unicode не могут быть использованы для кодирования точек суррогатной коды индивидуально (те, между 0xD800 и 0xDFFF), вы должны указать фактический дополнительный пункт кода:

NSString *str = @"\U0001F44D"; 
+0

, Спасибо за ваш ответ «\ u2614 \ ufe0f» это нормально, потому что он не принадлежит суррогату кодирования. – hyman