2015-01-14 2 views
0

내 그림에 그림 이모티콘과 비 라틴 문자 세트 지원을 추가하려고합니다. 나는 앞뒤로 의사 소통을위한 다리로서 PHP가있는 MySQL 데이터베이스를 가지고있다. 이모티콘 등을 다루는 복잡한 작업에 대해 많은 조사를 해봤지만 이상한 문제가 발생했습니다.POST를 통해 그림 이모티콘 또는 동아시아 문자 보내기

하나 또는 두 개의 이모티콘을 보내면 모든 것이 잘됩니다. 더 긴 메시지, 어쩌면 이모티콘 15 개를 보내면 문제가 발생하고 PHP 스크립트가받는 데이터가 손상됩니다. 나는 또한 500 자 정도의 문자열을 라틴 문자와 일본어 문자로 보내려고했는데 그것도 잘못되었습니다. 한 가지 경우에는 오류가 없었지만 일부 메시지는 끊어졌습니다. 이 오류는 모두 텍스트가 MySQL 데이터베이스에 도달하기 전에 발생하지만 콘솔에서 테스트하면 데이터베이스 자체가 이러한 모든 사항을 올바르게 처리 한 것으로 보입니다.

내가 직접 웹 브라우저에서이 문제를 일으키는 모든 문자열을 시도하는 크롬 앱 우체부를 사용했습니다, 그들은 전혀 문제를 통해

일부 샘플 문자열 갔다 :

작품의 벌금을 :

그림이 있기 전에 잘립니다. 나는 그것이 효과가 있다고 생각합니까?/???? ??//? ? ? ? ? ? ? ? 보조 노트, 그것은 작동하지 않았다

PHP 스크립트에서

손상된 문자열 : 大地 を 踏 み し め て 君 は 目 覚 め て い く 天使 の 微笑 み で 連 れ 出 し て!孤独 で も 一 人 じ ゃ な い さ 生 ま れ て き た こ と に 必 ず 意味 が あ る 優 し さ に 満 ち 溢 れ て る 青 い 地球 (ほ し) に あ り が と う

PHP 스크립트에서

손상된 문자열 "Sed의는 유타 perspiciatis 운데를 하나 하나 ISTE natus 오류 앉아 voluptatem 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관, 고등 교육 기관의 고등 교육 기관,

다시 말하지만, 우편 배달부를 통해 보내면 다시 작동합니다. 따라서 내 Swift 코드에서 확실한 문제인 것으로 보입니다. 문제의 코드 :

func sendRequest(completion: (NSData?, NSURLResponse!, NSError?) ->()) { 
    let rString = NSString(string: requestString) 
    let requestData = NSData(bytes: rString.UTF8String, length: rString.length) 
    request.HTTPMethod = "POST"; 
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "content-type") 
    request.HTTPBody = requestData 
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true 

    func fullCompletion(data: NSData?, response: NSURLResponse!, error: NSError?) { 
     UIApplication.sharedApplication().networkActivityIndicatorVisible = false; 
     completion(data, response, error) 
    } 

    activeTask = session.dataTaskWithRequest(request, completionHandler: fullCompletion) 
    activeTask!.resume() 
} 

코드는 requestString를 조립 :

func addVariable(name: String, value: String) { 
    if !requestString.isEmpty { 
     requestString += "&" 
    } 
    requestString += "\(name)=\(value)" 
} 

session 기본 구성으로 NSURLSession 개체입니다.

나는 모든 것을 제공했다고 생각하지만, 내가 잊어 버린 부분을 기꺼이 추가 할 것입니다.

+0

당신은 당신이 후로 그래서 태그 PHP는 오분입니다 ... 당신은 이미 아이폰 OS 프로그램에서 뭔가 문제를 격리 의미, 웹 브라우저에서 직접 잘 작동 발견 : 다음과 같이 변경 내 문제를 해결 만들기 PHP가 괜찮은지 확인했습니다. – developerwjk

+0

아프지 만 16 진수를 덤프하고 실제로 데이터를 검사합니다. – zaph

+0

좋은 지적입니다. 속이는 것을 시도하지 않고, 꼬리표를 고치려고하지 않았다 –

답변

0

그것은 이상한 해결책으로 밝혀졌습니다. 나는 Zaph의 제안 덕분에 데이터를 직접보고 있었고 그것이 짧아지고 있음을 발견했습니다.

//changed this: 
let requestData = NSData(bytes: rString.UTF8String, length: rString.length) 
//to this: 
let requestData = rString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
+0

Swift는 정확하게 유니 코드 문자를 식별하고 유니 코드 문자는 2 바이트 이상으로 구성 될 수 있습니다. 실제로 이모티콘은 일반적으로 평면 1에서 발생하며 여러 바이트를 필요로합니다. 비 ASCII 문자는 2 개 이상 필요합니다 바이트. – zaph

관련 문제