Swift - 将中文转换成字符值引用 (numeric character reference, NCR)
(本文代码已升级至Swift3)
(2)我们可以将其理解为HTML、XML 等 SGML 类语言的转义序列(escape sequence)。而不是一种编码或转码。

1,什么是字符值引用
(1)字符值引用 (numeric character reference, NCR) 是在标记语言SGML以及派生的如HTML与XML中常见的一种转义序列结构,用来表示Unicode的通用字符集 (UCS)中的单个字符. NCR可以表示在一个特定文档中不能直接编码的字符,而该标记语言阅读器软件把每个NCR当作一个字符来处理。(2)我们可以将其理解为HTML、XML 等 SGML 类语言的转义序列(escape sequence)。而不是一种编码或转码。
2,字符值引用的格式

4,将字符值引用转位普通字符串
运行结果:
以「&#x」开头的后接十六进制数字。或者以「&#」开头的后接十进制数字。
中国 //中国(16进制格式) 中国 //中国(10进制格式)(不管哪种形式写在html页面中都会正常显示出“中国”)
3,将普通字符串转为字符值引用
由于Swift不提供原生的方法,那么我们通过扩展String类来实现
extension String { //转译成字符值引用(NCR) func toHtmlEncodedString() -> String { var result:String = ""; for scalar in self.utf16 { //将十进制转成十六进制,不足4位前面补0 let tem = String().appendingFormat("%04x",scalar) result += "&#x\(tem);"; } return result } }使用样例:
let words = "欢迎来到 hangge.com" print(words.toHtmlEncodedString())运行结果:

4,将字符值引用转位普通字符串
同样先扩展String类
extension String { init(htmlEncodedString: String) { do { let encodedData = htmlEncodedString.data(using: String.Encoding.utf8)! let attributedOptions:[String : Any] = [ NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue ] let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) self.init(attributedString.string)! } catch { fatalError("Unhandled error: \(error)") } } }使用样例:
let words = String(htmlEncodedString: "欢迎来到 hangge.com") print(words)
