发布于2023-05-25 19:41 阅读(990) 评论(0) 点赞(30) 收藏(2)
我使用以下代码在目标 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 body 时,我得到:
<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\U00bb\U00ce\U00b7\U00cf\U0082"; 任何想法?
错误一定是在链的最后一位,此处未显示的打印响应的代码段,这让您认为传输已中断。
iOS 客户端和 Java 服务器可以相互理解,实际上响应是 Μανόλης(我不会说希腊语,但似乎是你要找的文字)
您看到的文本ÎανÏληÏ
是相同的字节序列,被解释为某种 7 位编码(可能是 CP1252,又名 Latin 1 或 CP1253,希腊代码页,我无法分辨,因为 StackOverflow 字体似乎有问题,或者无论如何我的测试程序无法产生该输出)
这是我用来分析您在问题末尾发布的“不正确”回复的程序
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/673758/bf603668184ff1689cf9/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!