程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用 HTTP post 发送希腊字符?

发布于2023-05-25 19:41     阅读(1045)     评论(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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

30 0
收藏该文
已收藏

评论内容:(最多支持255个字符)