문제

CP1251 (Cyrillic)에서 인코딩 된 필드가있는 AvmetadataItem이 있습니다.Item.StringValue를 읽은 후 나는 가비지를 가져옵니다 - 잘못 인코딩 된 문자열을 얻을 수 있습니다. CP1251 인코딩을 사용하여 해당 문자열을 원시 UTF8로 변환 한 다음 CP1251 인코딩을 사용하여 새 문자열을 만드는 중입니다. 결과는 NIL입니다.item.datavalue - 주사위를 찍으려고, 그것은 원시 목록 데이터 (bplist ...)를 포함합니다.

아이디어는 매우 높이 평가됩니다.

미리 감사드립니다.

도움이 되었습니까?

해결책 2

MIKE 애쉬의 nspropertylistreader_binary1을 사용하여 원시 데이터를 가져 와서 NSString이 인코딩 할 수 있도록 삽입 한 다음 jake.

끔찍한 - 그러나 일했습니다.

다른 팁

스위프트 2.0 솔루션 :

let origTitleMeta: NSData = (<AVMetadataItem>.timedMetadata?.first?.stringValue?.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: true))!

let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)!
.

ivmetadataItem 확장자가 있습니다 :

extension AVMetadataItem {

    /// stringValue: ISO-8859-1 → UTF-8
    var utf8String: String? {
        guard let data = stringValue?.data(using: String.Encoding.isoLatin1, allowLossyConversion: true) else {
            return nil
        }
        return String(data: data as Data, encoding: String.Encoding.utf8)
    }
}
.

스위프트 3.0 용액 :

let data: Data = item.timedMetadata!.first!.stringValue.data(using: String.Encoding.isoLatin1, allowLossyConversion: true)!

let title: String = String(data: data as Data, encoding: String.Encoding.utf8)!
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top