【问题标题】:Swift UTF8 encoding and non UTF8 characterSwift UTF8 编码和非 UTF8 字符
【发布时间】:2015-03-07 03:33:54
【问题描述】:

我有一些来自 json 文件的文本。在本文中,我应用了 UTF8 编码,但此编码器无法识别非标准字符 àèìòù 并且它是大写字符,有没有一种方法可以净化我的字符串?

我的功能:

func stringToUTF8String (stringaDaConvertire stringa: String) -> String {
    let encodedData = stringa.dataUsingEncoding(NSUTF8StringEncoding)!
    let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
    let attributedString = NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil, error: nil)!
    //println(attributedString.string)
    return attributedString.string
}

【问题讨论】:

  • String 给你什么字节输出?你会期待什么?此外,我不确定您将非标准字符插入 StackOverflow 是否正确。
  • 请显示一个(短)输入字符串来说明问题以及实际输出和预期输出。

标签: swift string utf-8


【解决方案1】:

我找到了解决办法。

UTF8 采用 8 位 ASCII 表,UTF16 采用 16 位 ASCII 表,解决方法很简单,修改我的函数为:

func stringToUTF16String (stringaDaConvertire stringa: String) -> String {
    let encodedData = stringa.dataUsingEncoding(NSUTF16StringEncoding)!
    let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
    let attributedString = NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil, error: nil)!
    //println(attributedString.string)
    return attributedString.string
}

【讨论】:

  • 是的,这可行,但我仍然不知道为什么 dataUsingEncoding 无法使用 UTF8StringEncoding 识别字符。就我而言,我验证了我的文件存储为 UTF-8,所以encodedData 应该包含正确的内容,我的猜测是 NSAttributedString 使用 UTF-16 编码,毕竟这是 NSString 支持的唯一编码,文档是虽然不清楚。
  • 我遇到了同样的问题,并确定它一定是由于NSAttributedString。文档从未指定参数data 应该具有什么编码,但我认为我们已经验证它必须是NSUTF16StringEncoding。在内部,他们可能会用它来解码。
  • 基础 NSString 使用 UTF-16 表示,因此默认值是有意义的。话虽如此,您可以指定options: [characterEncoding: NSUTF8StringEncoding] 来匹配传入的数据。
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
相关资源
最近更新 更多