如何可靠地转换特殊字符,如£;使用Cocoa创建HTML等价物?

如何可靠地转换特殊字符,如£;使用Cocoa创建HTML等价物?,cocoa,email,html-entities,macos,Cocoa,Email,Html Entities,Macos,我正在尝试向Mail.app提供一些简单的html:列表、粗体字体和斜体。然而,我注意到,如果我使用像()这样的字符,那么Mail.app就不会显示任何内容。我意识到我需要转换成HTML实体,比如£(此处为完整列表:)。我有一个局部解决方案,适用于我的用户提出的大多数字符,但它远不是一个可靠的解决方案: - (NSString*) makeValidHTML:(NSString*)str { str = [str stringByReplacingOccurrencesOfStri

我正在尝试向Mail.app提供一些简单的html:列表、粗体字体和斜体。然而,我注意到,如果我使用像
)这样的字符,那么Mail.app就不会显示任何内容。我意识到我需要转换成HTML实体,比如
£(此处为完整列表:)。我有一个局部解决方案,适用于我的用户提出的大多数字符,但它远不是一个可靠的解决方案:

- (NSString*) makeValidHTML:(NSString*)str {
  str = [str stringByReplacingOccurrencesOfString:@"£" withString:@"£"];
  str = [str stringByReplacingOccurrencesOfString:@"¢" withString:@"¢"];
  str = [str stringByReplacingOccurrencesOfString:@"¥" withString:@"¥"];
  str = [str stringByReplacingOccurrencesOfString:@"©" withString:@"©"];
  str = [str stringByReplacingOccurrencesOfString:@"®" withString:@"®"];
  str = [str stringByReplacingOccurrencesOfString:@"°" withString:@"°"];
  str = [str stringByReplacingOccurrencesOfString:@"¿" withString:@"¿"];
  str = [str stringByReplacingOccurrencesOfString:@"¡" withString:@"¡"];
  str = [str stringByReplacingOccurrencesOfString:@"‘" withString:@"'"];
  str = [str stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
  str = [str stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
  str = [str stringByReplacingOccurrencesOfString:@"\"" withString:@"""];
  str = [str stringByReplacingOccurrencesOfString:@"“" withString:@"""];
  str = [str stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"];
  str = [str stringByReplacingOccurrencesOfString:@">" withString:@"&gt;"];
  return str;
}
-(NSString*)makeValidHTML:(NSString*)str{
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“£”和STRING:@“£;”;
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“、”withString:@“¢;”];
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“¥”withString:@“¥;”;
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“)“withString:@”©;”;
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“®”with STRING:@“®;”];
str=[str STRINGBYREPLACINGOURCURNCESOFSTRING:@“°”带字符串:@“°;”;
str=[str stringByReplacingOccurrencesOfString:@“?”with string:@“¿;”];
str=[str STRINGBYREPLACINGOURCRENCESOFSTRING:@“withString:@”¡;”;
str=[str STRINGBYREPLACINGOCURNCESOFSTRING:@“'”和STRING:@“'”];
str=[str STRINGBYREPLACINGOCURNCESOFSTRING:@“'”和STRING:@“'”];
str=[str stringByReplacingOccurrencesOfString:@”和“with string:@”和“];
str=[str STRINGBYREPLACINGOCURNCESOFSTRING:@“\”和字符串:@“”;
str=[str STRINGBYREPLACINGOCURNCESOFSTRING:@''和STRING:@''”;
str=[str STRINGBYREPLACINGOURCRENCESOFSTRING:@“with string:@]”;
返回str;
}

是否有一种标准方法可以做到这一点,而不必列出所有可能的保留字符?

此类应该对您有所帮助:

从另一个SO中检索到的链接回答:

我认为您的主要问题是您没有将HTML页面编码并声明为UTF-8。而您提到的一些实体是真正的问题,需要转换,例如
(链接到的code@Joel Martinez将在这方面有所帮助),如果页面声明并编码为unicode格式,如UTF-8:


尝试了此操作,但没有任何区别,但感谢您的建议。当服务器发送内容类型HTTP标头中的字符集时,此操作实际上不起作用,因为HTTP标头优先于元标头。