在 Objective-c 中处理 Windows 希伯来语编码

Handling Windows Hebrew Encoding in Objective-c

我正在为一个运行 VB6 的程序开发一个古老的 iOS 应用程序。它以非 unicode 格式传递字符串,包括希伯来字符,这些字符一旦被解析就会显示为“àáðø ãøåøé” 我假设它是用 Windows 希伯来语编码的。

我似乎无法在 apple 文档中找到任何解释如何处理这种情况的内容。大多数搜索都在 Swift 中提出解决方案,没有 Obj-C。我试过这个:

NSString *hebrewPickup = [pickupText stringByApplyingTransform:NSStringTransformLatinToHebrew reverse:false];

但这只给了我这个:

"ðø ַ̃øַ̊øֵ"

我难住了。

编辑:根据 JosefZ 的评论,我尝试使用 CP1252 进行编码,但问题是 CP1255 不在 NSStringEncodings 列表中。但似乎它会解决我的问题。

NSData *pickupdata = [pickupText dataUsingEncoding:NSWindowsCP1252StringEncoding];
NSString *convPick = [[NSString alloc] initWithData:pickupdata encoding:NSWindowsCP1254StringEncoding];
NSString *hebrewPickup = [convPick stringByApplyingTransform:NSStringTransformLatinToHebrew reverse:false];

好的,如果有任何可怜的灵魂在这里结束,这就是我最终修复它的方式。我需要在我的 Obj-C 代码中添加一些 Swift。 (要是我能神奇地在 Swift 中重建整个项目就好了。) 这是相关信息:https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c

利用这个 Swift 包:https://github.com/Cosmo/ISO8859

我将以下代码添加到新的 swift 文件中。

@objc class ConvertString: NSObject {
    
    @objc func convertToHebrew(str:String) -> NSString {
        let strData = str.data(using: .windowsCP1252);
        let bytes: Data = strData!;
        if let test = String(bytes, iso8859Encoding: ISO8859.part8) {
            return test as NSString;
        }
        let test =  "";
        return test as NSString;
    }
}

然后在 Obj-C 项目中我可以这样调用它:

ConvertString *stringConverter = [ConvertString new];
    
    NSString *pickupTextFixed = [stringConverter convertToHebrewWithStr:pickupText];
    NSString *deliverTextFixed = [stringConverter convertToHebrewWithStr:deliverText];