Я пишу некоторый код для синтаксического анализа корейского текста с сервера, закодированного с помощью euc-kr
корейского кодировщика.Быстрое кодирование euc-kr korean не работает. Но работает в python
Когда я просто делаю то же кодирование в Python, он работает так, как ожидалось. Но когда я делаю это так, кодирование не работает. Результат не читается.
В Python:
string = u'안녕하세요.'.encode('eucKR')
В Swift:
let encoding:UInt = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(
CFStringEncodings.EUC_KR.rawValue))
let encodedData = "안녕하세요.".data(using: String.Encoding(rawValue: encoding))!
Что разница между этими 2 кодировках?
Ниже приведены полные исходные коды как для 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)
Swift:
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 ""
}
}
Как вы проверили результаты? Насколько я могу проверить на Mac (Xcode 8.2.1 и python 2.7.10), оба результата содержали точно такую же последовательность байтов. – OOPer
Можете ли вы узнать, какое решение будет для моей проблемы? Я застрял на нем около 3 часов. до сих пор не повезло. –
Ваш способ отправки запроса POST в EUC-KR является совершенно неправильным, но на данный момент у меня недостаточно времени для написания ответа. Подождите того, кто может вам помочь (или для меня, позже). Теперь ваш вопрос, похоже, готов к поиску пути решения вашей проблемы. – OOPer