我正在扫描一些条形码并将它们解码为Swift字符串。特定扫描程序提供了一个对象,其中包含构建NSData所需的信息:
let rawData = decodedData.getData() // UnsafeMutablePointer<UInt8>
let rawDataSize = decodedData.getDataSize() // UInt32
let data = NSData(bytes: rawData, length: Int(rawDataSize)) // NSData
然后我将其解码为字符串:
let string = NSString(data: data, encoding: NSUTF8StringEncoding) as? String
我发现解码时某些条形码返回nil,除非我切换到NSASCIIStringEncoding
:
let string = NSString(data: data, encoding: NSASCIIStringEncoding) as? String
我对字符串编码的理解是有限的,但我的印象是任何ASCII字符串都可以解码为UTF8,因为ASCII是UTF8的子集。这准确吗?
如果是这样,还有什么可能导致这个问题?
答案 0 :(得分:2)
问题是如果解释为UTF-8,并非每个字节序列都有效。例如,值为0xff = 255的单个字节在UTF-8中永远不会有效。另一方面,ASCII编码可能允许每个字节值,即使这不是真的正确。
您最好仔细查看数据,看看它实际上是什么编码。如果它只是随机字节,那么请不要将它们转换为字符串。