在 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];
我正在为一个运行 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];