但問題是,iOS的string是個UTF8Encoding, 所以要找個方法來把他轉換一下
之前做的都是把抓到的big5 encoding data 轉 NSUTF8Encoding,做法約:
NSStringEncoding big5 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingBig5_HKSCS_1999); NSString *str = [[NSString alloc] initWithData:input encoding:big5];
如此就可以得到一個UTF8編碼的String
那要得到一個Big5編碼的String呢? 答案是:沒辦法
或許你會看到有人說這樣:
NSStringEncoding big5 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingBig5_HKSCS_1999); return [input stringByAddingPercentEscapesUsingEncoding:big5];
But... 這只有URL的時候才有效啊 ex :
www.google.com?q=test%2B%E4%B8%AD%E6%96%87
這時候URL會幫你自動翻成:
www.google.com?q=test+中文
但如果你要用POST呢? 那不能丟URL啦! 所以到底該怎麼辦?
通常傳送 Post Request都是用NSMutableURLRequest
他的HTTPBody是個NSData,因此只要確保NSData是Big5編碼就可以了
而要得到Big5編碼的NSData可以透過:
NSStringEncoding big5 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingBig5_HKSCS_1999); return [input dataUsingEncoding:big5 allowLossyConversion:false];
這樣就可以啦!
--------------------------------------------------------------------------------------------------------------------------
2015.10.13更新
使用Swift來進行編碼轉換
extension NSData { var big5String: String? { let big5 = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.Big5.rawValue)) return NSString(data: self, encoding: big5) as? String; } } extension String { var big5Data: NSData? { let big5 = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.Big5.rawValue)) return self.dataUsingEncoding(big5, allowLossyConversion: false); } }
請教一下 我使用這個方法卻出現錯誤訊息如下 Use of unresolved identifier 'kCFStringEncodingBig5'
回覆刪除是否在swift裏頭無法使用呢?
上面範例是Objective-C的程式碼, 可用Objective-C寫完之後再透過bridge import
刪除swift的轉碼以前我也沒找到,最近有找到辦法, 晚點再更新.
作者已經移除這則留言。
回覆刪除