【发布时间】:2015-02-18 20:25:50
【问题描述】:
我使用以下代码在目标 c 中创建一个请求:
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 设备,它是这样的: 响应=“\U00ce\U009c\U00ce\U00b1\U00ce\U00bd\U00cf\U008c\U00ce\U00bb\U00ce\U00b7\U00cf\U0082”; 有什么想法吗?
【问题讨论】:
标签: java objective-c json http utf-8