首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串字符编码

字符串字符编码
EN

Stack Overflow用户
提问于 2013-12-11 14:09:09
回答 1查看 1.5K关注 0票数 2

我们为它们开发了一个特定的出口商,它允许基于头寸的产品提供一种投资组合快照--包括股票和固定收益投资组合的。 我们为他们开发了一个特定的出口商,它允许基于仓位的产品提供一种投资组合快照-欧元“包括股票和固定收益投资组合的

第一篇是我从吉拉那里抄来的,第二篇是在“认知”中印刷的。我通过REST以JSON格式从Jira获取文本,并使用字符串生成器对其进行格式化,最后返回一个普通字符串作为输出。所有的符号,如" ' -等都没有被正确地打印出来,我在输出文本中得到了大量的–。我怎么才能解决呢?我在想,如果有什么方法可以改变输出字符串的编码,也许可以吗?

编辑:--这是我从Jira获取信息的工具,之后我从返回的JSON中提取我想要的内容。

代码语言:javascript
复制
   String usercreds = "?os_username=user&os_password=password";
   try {
        url = new URL("http://jira/rest/api/2/issue/" + issuekey + usercreds);

        URLConnection urlConnection = url.openConnection();

        if (url.getUserInfo() != null) {
            String basicAuth = "Basic " + new String(new Base64().encode(url.getUserInfo().getBytes()));
            urlConnection.setRequestProperty("Authorization", basicAuth);
        }

        InputStream inputStream = urlConnection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        while ((s = reader.readLine()) != null) {
            temp.append(s);
            s = "";
        }
        issue = new JSONObject(temp.toString());
        temp.setLength(0);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }

如果我正确理解,应该有一种方法来指定输出在代码中的某个位置是("application/json;charset=utf-8"),这可能解决我的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 16:28:48

JSON响应中的破折号是U+2013 (EN破折号)。当编码为UTF-8时,如果形成字节序列e2 80 93.该数据正在使用错误的编码(最有可能是Windows1252)进行解码。Java的默认I/O编码依赖于系统。

代码语言:javascript
复制
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

上面的线路是错的。使用编码转换代码时,必须指定InputStreamReader

例如:

代码语言:javascript
复制
  public static void readUtf8(URLConnection connection, Appendable out)
      throws IOException {
    CharBuffer buffer = CharBuffer.allocate(1024);
    try (InputStream in = connection.getInputStream();
    Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8)) {
      while (reader.read(buffer) != -1) {
        buffer.flip();
        out.append(buffer);
        buffer.clear();
      }
    }
  }

注意:从技术上讲,JSON可以是任何Unicode编码(而不仅仅是UTF-8) --如果您需要处理读取的http://illegalargumentexception.blogspot.co.uk/2013/06/java-detecting-json-character-encoding.html

注2:自Java5以来,HttpUrlConnection似乎有所改进,但我将确保它能够自动处理长度(读取Content-Length头/处理块编码/等等)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20521327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档