【发布时间】:2016-12-21 19:40:37
【问题描述】:
我正在编写一些代码来解析来自使用euc-kr 韩国编码器编码的服务器的韩国文本。
当我在 Python 中执行相同的编码时,它会按预期工作。 但是当我按照以下方式进行操作时,编码不起作用。结果是不可读的。
在 Python 中:
string = u'안녕하세요.'.encode('eucKR')
在斯威夫特中:
let encoding:UInt = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(
CFStringEncodings.EUC_KR.rawValue))
let encodedData = "안녕하세요.".data(using: String.Encoding(rawValue: encoding))!
这两种编码有什么区别?
以下是 python 和 swift 的完整源代码。我仍然坚持编码部分。问题是否与 alamofire 发布请求有关?
Python:
import requests
from pattern import web
string = u'저는 내일 바빠서 학교에 못갑니다.'.encode('eucKR')
r = requests.post("http://nlp.korea.ac.kr/~demo/dglee/komatag.php", data={'formradio1': '', 'formradio2': 'ems', 'textarea': string})
dom = web.Element(r.text)
main = dom('tr')
for item in main:
result = web.plaintext(item.source)
a = result.encode('ISO-8859-1')
t=a.decode('eucKR')
print(t)
斯威夫特:
override func viewDidLoad() {
let string: NSString = NSString(string: "안녕하세요")
let encodedEucKr = stringToEuckrString(stringValue: string as String)
print(encodedEucKr)
Alamofire.request("http://nlp.korea.ac.kr/~demo/dglee/komatag.php", method: .post, parameters: ["formradio1":"", "formradio2":"ems", "textarea": encodedEucKr], headers: nil).responseString { response in
switch(response.result) {
case .success(_):
if let data = response.result.value{
print(response.result.value)
}
break
case .failure(_):
print(response.result.error)
break
}
}
}
func stringToEuckrString(stringValue: String) -> String {
let encoding:UInt = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(
CFStringEncodings.EUC_KR.rawValue))
let encodedData = stringValue.data(using: String.Encoding(rawValue: encoding))!
let attributedString = try? NSAttributedString(data: encodedData, options:[:], documentAttributes: nil)
if let _ = attributedString {
return attributedString!.string
} else {
return ""
}
}
【问题讨论】:
-
您是如何检查结果的?据我在 May Mac(Xcode 8.2.1 和 python 2.7.10)上测试,两个结果都包含完全相同的字节序列。
-
你能找出解决我问题的方法吗?我已经坚持了大约3个小时。仍然没有运气。
-
你在 EUC-KR 中发送 POST 请求的方式是完全错误的,但就目前而言,我没有足够的时间来写一个答案。等待可以帮助您的人(或稍后为我)。现在您的问题似乎已经准备好寻找解决问题的方法了。
-
非常感谢您的帮助。这几乎是我第一次使用stackoverflow。稍后我会等待某人或您的答复。
标签: swift encoding http-request