создать запрос в Objective C с этим кодом:Как отправить греческие символы с HTTP-сообщением?
NSString *urlBasic = [NSString stringWithFormat:@"http://localhost:8080/belka/Login?"];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[defaults objectForKey:@"userID"], @"userID", @"login", @"login", [defaults objectForKey:@"userName"], @"userName", [defaults objectForKey:@"userFirstName"], @"userFirstName", [defaults objectForKey:@"userLastName"], @"userLastName", nil];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
options:NSUTF8StringEncoding
error:&error];
NSString *s=[urlBasic stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:s];
dispatch_async(kBgQueue, ^{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];
NSURLResponse *response;
NSError *error;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if ((data.length > 0) && (error == nil)) {
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:NO];
}
});
В по умолчанию, USERFIRSTNAME и USERLASTNAME в греческом. Когда я печатаю описание «jsonData», греческие символы в порядке. Когда я распечатать HTTP тело я получаю:
<7b227573 65724669 7273744e 616d6522 3a22ce9c ceb1cebd cf8ccebb ceb7cf82 222c226c 6f67696e 223a226c 6f67696e 222c2275 7365724c 6173744e 616d6522 3a224b61 72616d61 6e697322 2c227573 65724944 223a2231 30313532 38313637 33333732 33313638 222c2275 7365724e 616d6522 3a224d61 6e6f6c69 73204b61 72616d61 6e697322 7d>
После запроса отправляется на стороне сервера, который находится в Java, у меня есть:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /*report an error*/ }
try
{
InitialContext ctx2 = new InitialContext();
UserTransaction utx = (UserTransaction) ctx2.lookup("java:module/UserTransaction");
utx.begin();
JSONObject data = new JSONObject(jb.toString());
String facebookID = data.getString("userID");
String name = data.getString("userFirstName");
String surname = data.getString("userLastName");
String username = data.getString("userName");
System.out.println(name);
//and other . . .
utx.commit();
response.setCharacterEncoding("UTF-8");
response.getOutputStream().write(name.getBytes());
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
Проблема заключается в том, что когда я пытаюсь напечатать имя, я получаю это: ÎÎ ± νÏÎ »Î · Ï И это имя отправляется обратно на устройство ios в качестве ответа, которое выглядит так: response =" \ U00ce \ U009c \ U00ce \ U00b1 \ U00ce \ U00bd \ U00cf \ U008c \ U00ce \ U00 бб \ U00ce \ U00b7 \ U00cf \ U0082" ; Любая идея?
Ответ, который вы упомянули (Μανόλης) - это то, что я хочу. Если байты правильные в каждой части этого вопроса, как я могу напечатать греческие символы, когда захочу? –
Введите код, который вы используете для печати – Raffaele
NSLog (@ "% @", request.HTTPBody.description); (для первой распечатки вопроса). На стороне сервера System.out.println (имя); и я получаю ÎÎ ± νÏÎ »Î · Ï. И ответ в iOS NSLog (@ "% @", response.description); и я получаю ответ = "\ U00ce \ U009c \ U00ce \ U00b1 \ U00ce \ U00bd \ U00cf \ U008c \ U00ce \ U00bb \ U00ce \ U00b7 \ U00cf \ U0082"; –