我正在為一個運行 VB6 的程式開發一個古老的 iOS 應用程式。它以非 unicode 格式傳遞字串,包括希伯來字符,一旦它們被決議,就會顯示為“àáe? ????é”,我假設它是用 Windows 希伯來語編碼的。
我似乎在蘋果檔案中找不到任何解釋如何處理這種情況的東西。大多數搜索都使用 Swift 提供解決方案,而不是 Obj-C。我試過這個:
NSString *hebrewPickup = [pickupText stringByApplyingTransform:NSStringTransformLatinToHebrew reverse:false];
但這只是給了我這個:
"e? ???????"
我難住了。
編輯:根據 JosefZ 的評論,我嘗試使用 CP1252 進行編碼,但問題是 CP1255 不在 NSStringEncodings 串列中。但似乎它會解決我的問題。
NSData *pickupdata = [pickupText dataUsingEncoding:NSWindowsCP1252StringEncoding];
NSString *convPick = [[NSString alloc] initWithData:pickupdata encoding:NSWindowsCP1254StringEncoding];
NSString *hebrewPickup = [convPick stringByApplyingTransform:NSStringTransformLatinToHebrew reverse:false];
uj5u.com熱心網友回復:
好吧,如果有任何可憐的靈魂在這里結束,這就是我最終修復它的方式。我需要在我的 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];
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/462947.html
