Swift,解码"iso-8859-5"
Swift, decoding "iso-8859-5"
我收到格式为 "iso-8859-5" 的一行,但我无法正确解码它。我认为问题在于我没有将字符串正确转换为数据。但是我不知道如何在不使用编码的情况下将字符串正确转换为数据。
请帮忙。
let string = "\X2\041F043504400435043A0440044B044204380435\X0\:\X2\042D\X0\_\X2\041F043B043804420430\X0\"
let encodingName = "iso-8859-5"
let cfe = CFStringConvertIANACharSetNameToEncoding(encodingName as CFString!)
if cfe != kCFStringEncodingInvalidId {
let encoding = CFStringConvertEncodingToNSStringEncoding(cfe)
let decString: String = NSString(data: string.data(using: String.Encoding.utf8)!, encoding: String.Encoding(rawValue: UInt(encoding)).rawValue)! as String
print("string: " + decString)
}
您不能将任意字节粘贴到 Swift 中的字符串文字中。您需要将其存储为 UInt8
数组或 Data
数组。示例:
let bytes: [UInt8] = [0x41, 0xF0, 0x43, 0x50, 0x44, 0x43, 0x50, 0x43, 0xA0, 0x44]
let data = Data(bytes)
let cfEncoding = CFStringConvertIANACharSetNameToEncoding("iso-8859-5" as CFString)
let nsEncoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding)
let string = NSString(data: data, encoding: nsEncoding) as String
您的编码字符串由 16 位 Unicode 值序列组成(\X2\
和 \X0
分隔符之间的十六进制数字)。当你从中提取值时,你会得到这个:
let bytes = [ 0x041F, 0x0435, 0x0440, 0x0435, 0x043A, 0x0440, 0x044B, 0x0442, 0x0438, 0x0435 ]
您可以使用以下方法将其转换为字符串:
var s = ""
s.unicodeScalars.append(contentsOf: bytes.flatMap { UnicodeScalar([=11=]) } )
print(s) // prints "Перекрытие"
我收到格式为 "iso-8859-5" 的一行,但我无法正确解码它。我认为问题在于我没有将字符串正确转换为数据。但是我不知道如何在不使用编码的情况下将字符串正确转换为数据。
请帮忙。
let string = "\X2\041F043504400435043A0440044B044204380435\X0\:\X2\042D\X0\_\X2\041F043B043804420430\X0\"
let encodingName = "iso-8859-5"
let cfe = CFStringConvertIANACharSetNameToEncoding(encodingName as CFString!)
if cfe != kCFStringEncodingInvalidId {
let encoding = CFStringConvertEncodingToNSStringEncoding(cfe)
let decString: String = NSString(data: string.data(using: String.Encoding.utf8)!, encoding: String.Encoding(rawValue: UInt(encoding)).rawValue)! as String
print("string: " + decString)
}
您不能将任意字节粘贴到 Swift 中的字符串文字中。您需要将其存储为 UInt8
数组或 Data
数组。示例:
let bytes: [UInt8] = [0x41, 0xF0, 0x43, 0x50, 0x44, 0x43, 0x50, 0x43, 0xA0, 0x44]
let data = Data(bytes)
let cfEncoding = CFStringConvertIANACharSetNameToEncoding("iso-8859-5" as CFString)
let nsEncoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding)
let string = NSString(data: data, encoding: nsEncoding) as String
您的编码字符串由 16 位 Unicode 值序列组成(\X2\
和 \X0
分隔符之间的十六进制数字)。当你从中提取值时,你会得到这个:
let bytes = [ 0x041F, 0x0435, 0x0440, 0x0435, 0x043A, 0x0440, 0x044B, 0x0442, 0x0438, 0x0435 ]
您可以使用以下方法将其转换为字符串:
var s = ""
s.unicodeScalars.append(contentsOf: bytes.flatMap { UnicodeScalar([=11=]) } )
print(s) // prints "Перекрытие"