我必须读取Swift / Cocoa中的文本文件,其编码为OEM850。有人知道如何执行此操作吗?
您可以首先将文件作为原始数据读取,然后根据您的编码将该数据转换为字符串值。您的情况下有细小的皱纹:
有两种类型代表已知的字符串编码,
NSStringEncoding
(在Swift中为NSStringEncoding
)和String.Encoding
。 Apple仅直接将已知编码的子集定义为String.Encoding
/CFStringEncoding
值。其余的已知编码具有CFStringEncoding
值,并提供了函数NSStringEncoding
将其映射到String.Encoding
。不幸的是,OEM 850仅由CFStringEncoding
...]直接提供听起来比实际更糟。在Objective-C中,您可以使用以下代码获取所需的编码:
] >CFStringConvertEncodingToNSStringEncoding()
注:“ DOS Latin 1”是“ OEM 850”所指代的同一编码的名称之一(列表请参见
CFStringConvertEncodingToNSStringEncoding()
),是Apple因此选择的NSStringEncoding
。
在Swift中,这更加混乱:
CFStringEncoding
一旦完成编码,剩下的就很简单了,没有错误检查
大纲是:
NSStringEncoding dosLatin1 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingDOSLatin1);
使用真实代码,您必须
检查文件读取和转换是否成功。如果读取失败,则从Swift中的URL读取原始数据将引发错误,将数据转换为字符串会产生可选的(Wikipedia),因为转换可能会失败。
HTH