Преобразование шестнадцатеричных NSString и UTF8 - PullRequest
0 голосов
/ 23 августа 2010

В этой функции я получаю выбранный смайлик из NSTableView из NSArrayController, подключенного к IBOutlet с именем emotes.Строка в выбранном NSArray содержит символы UTF8, которые отправляются в буфер обмена.

// Get Selected Emoticon
NSArray * selectedemote = [emotes selectedObjects];
NSLog(@"%@",[selectedemote valueForKey:@"emote"]);
// Send to Clipboard
[self copyToClipboard:[NSString stringWithFormat:@"%@",[selectedemote valueForKey:@"emote"]]];

Проблема связана с самим NSArray.Кажется, вывести строку UTF8 в шестнадцатеричном виде.Вот как выглядит строка из функции NSLog:

2010-08-23 11:23:56.411 Emoticon[7919:a0f] (
    "\\(\U2579\U30ee\U2579 )/"
)

Есть ли возможный способ преобразования шестнадцатеричного UTF-8 в символы UTF-8?Благодарю.

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Я решил проблему. Решение состоит в том, чтобы использовать NSEntityDescription и начать его с objectAtIndex: 0 в NSArray с выбранной ячейкой. Используя NSEntityDescription, я получил значение для Emote.

-(IBAction)sendtoclipboard:(id)sender
{
    // Get Selected Emoticon
    NSArray * selectedemote = [emotes selectedObjects];
    NSEntityDescription *entity = [selectedemote objectAtIndex:0];
    NSString * tmpemote = [NSString stringWithFormat:@"%@",[entity valueForKey:@"emote"]];
    NSLog(@"%@", [entity valueForKey:@"emote"]);
    //Send to Clipboard
    [self copyToClipboard:tmpemote];
}

Результат:

2010-09-07 20:03:26.488 Emoticon[45764:a0f] \(╹ヮ╹ )/
0 голосов
/ 23 августа 2010

Проблема с самим NSArray.Кажется, что строка UTF8 выводится в шестнадцатеричном виде.

Как я отметил в своем комментарии, строка не является UTF-8.Строки не имеют ничего общего с кодировками, кроме случаев, когда вы создаете их из данных или создаете из них данные.

Вот как выглядит строка из функции NSLog:

2010-08-23 11:23:56.411 Emoticon[7919:a0f] (
    "\\(\U2579\U30ee\U2579 )/"
)

NSArray описывает себя, возвращая строку в формате списка свойств старого стиля.Этот формат должен быть ASCII, поэтому массиву удаляются не-ASCII символы строки с этими \U последовательностями.Это работает так, как должно, и зависит от описания массива.Строка остается неизменной, как вы увидите, если вы зарегистрируете строку напрямую.

Если вы хотите поместить массив в буфер обмена, просто сделайте это.Вы должны создать унифицированный идентификатор типа (yourdomain.yourappname.typename) и указать монтажной панели установить массив в качестве значения списка свойств для этого типа.Вы также можете указать массиву присоединиться к строкам, используя некоторый разделитель (например, @"\n"), и поместить эту строку на монтажный стол под типом строки, чтобы легко вставить текстовые редакторы и текстовые поля.

...