Ich schreibe einen Code, um koreanischen Text von Server mit codierten euc-kr
koreanischen Encoder zu analysieren.Swift euc-kr koreanische Codierung funktioniert nicht. Aber funktioniert in Python
Wenn ich nur die gleiche Codierung in Python, funktioniert es wie erwartet. Aber wenn ich es wie folgt mache, funktioniert die Codierung nicht. Das Ergebnis ist nicht lesbar.
In Python:
string = u'안녕하세요.'.encode('eucKR')
In Swift:
let encoding:UInt = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(
CFStringEncodings.EUC_KR.rawValue))
let encodedData = "안녕하세요.".data(using: String.Encoding(rawValue: encoding))!
Was ist der Unterschied zwischen diesen zwei Codierungen?
Im Folgenden finden Sie vollständige Quellcodes für Python und Swift. Ich steckte immer noch auf den Kodierungsteil. Ist das Problem mit Alamofire Post Anfrage verbunden?
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 ""
}
}
Wie haben Sie Ihre Ergebnisse überprüft? Soweit ich auf Mac getestet habe (Xcode 8.2.1 und Python 2.7.10) enthielten beide Ergebnisse genau die gleiche Bytefolge. – OOPer
Können Sie herausfinden, was die Lösung für mein Problem wäre? Ich habe es für ungefähr 3 Stunden festgefahren. immer noch kein Glück. –
Ihre Art, eine POST-Anfrage in EUC-KR zu senden, ist völlig falsch, aber im Moment habe ich nicht genug Zeit, um eine Antwort zu schreiben. Warte auf jemanden, der dir helfen kann (oder für mich später). Jetzt scheint Ihre Frage bereit zu sein, einen Weg zur Lösung Ihres Problems zu finden. – OOPer