将unicodestring转换为nsstring

我有一个Unicodestring

{\rtf1\ansi\ansicpg1252\cocoartf1265 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{check\}}{\leveltext\leveltemplateid1\'01\uc0\u10003 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} \paperw11900\paperh16840\margl1440\margr1440\vieww22880\viewh16200\viewkind0 \pard\li720\fi-720\pardirnatural \ls1\ilvl0 \f0\fs24 \cf0 {\listtext \f1 \uc0\u10003 \f0 }One\ {\listtext \f1 \uc0\u10003 \f0 }Two\ } 

这里我有unicode数据\ u10003相当于“✓”字符。 我已经使用[NSString stringWithCharacters:“\ u10003”长度:NSUTF16StringEncoding]这是抛出编译错误。 请让我知道如何将这些Unicode字符转换为“✓”。

问候,轰隆

我假设:

  • 您正在从文件或其他外部源读取此RTF数据。
  • 你正在parsing它(不使用,例如,AppKit内置的RTF分析器)。
  • 你有一个原因,你自己parsing它,这个原因不是“等待,AppKit有内置?”。
  • 您在parsing的input中find\u… ,并且需要将其转换为字符,以便进一步处理和/或包含在输出文本中。
  • 你已经排除了\uc ,这是一个不同的事情(它指定了遵循\u…序列的非Unicode字节的数量,如果我正确理解了RTF规范的话)。

后面跟着hex数字。 你需要parsing这些数字; 该数字是序列代表的字符的Unicode代码点编号。 然后您需要创build一个包含该字符的NSString。

如果您使用NSScanner来parsinginput,那么(假设您已经扫描过\u本身),您可以直接询问扫描器来扫描scanHexInt: 。 传递一个指向unsigned intvariables的指针。

如果你不使用NSScanner,不pipe你是否parsing它,做任何有意义的事情。 例如,如果您已将RTF数据转换为Cstring并正在通读它,则需要使用strtoul来parsinghex数字。 它会解释你指定的数字(在本例中是16)的数字,然后把指针指向你想要的下一个字符。

然后,您的unsigned intunsigned longvariables将包含指定字符的Unicode代码点值。 在你的问题的例子中,这将是0x10003 ,或U + 10003。

现在,对于大多数字符,您可以简单地将其分配给unicharvariables,并从中创buildNSString。 这不会在这里工作: unichar只能达到0xFFFF ,这个代码点高于(在技术上说,它是基本的多语言平面之外)。

幸运的是,* CF * String有一个函数可以帮助你:

 unsigned int codePoint = /*…*/; unichar characters[2]; NSUInteger numCharacters = 0; if (CFStringGetSurrogatePairForLongCharacter(codePoint, characters)) { numCharacters = 2; } else { characters[0] = codePoint; numCharacters = 1; } 

然后可以使用stringWithCharacters:length:从这个16位字符数组中创build一个NSString。

我有同样的问题和下面的代码解决了我的问题

对于编码

 NSData *dataenc = [yourtext dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *encodevalue = [[NSString alloc]initWithData:dataenc encoding:NSUTF8StringEncoding]; 

解码

  NSData *data = [yourtext dataUsingEncoding:NSUTF8StringEncoding]; NSString *decodevalue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 

谢谢

我用下面的代码将Uniodestring转换为NSString。 这应该工作得很好。

  NSData *unicodedStringData = [unicodedString dataUsingEncoding:NSUTF8StringEncoding]; NSString *emojiStringValue = [[NSString alloc] initWithData:unicodedStringData encoding:NSNonLossyASCIIStringEncoding]; 

在Swift 1.2中

 let theString1:NSString = "😃" let unicodedData:NSData = theString1.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! let emojiString = NSString(data: unicodedData, encoding: NSUTF8StringEncoding) 

在这里输入图像说明

用这个:

 NSString *myUnicodeString = @"\u10003"; 

感谢现代客观的C
让我知道如果它不是你想要的。

 NSString *strUnicodeString = "\u2714"; NSData *unicodedStringData = [strUnicodeString dataUsingEncoding:NSUTF8StringEncoding]; NSString *emojiStringValue = [[NSString alloc] initWithData:unicodedStringData encoding:NSUTF8StringEncoding];