【问题标题】:Converting Image into Base64 in json file issue将图像转换为 json 文件中的 Base64 问题
【发布时间】:2019-11-19 15:22:53
【问题描述】:

我在编码图像以将其发送到 json 文件时遇到问题。如果我将图像字符串提取到 txt 并对其进行解码,它可以正常工作并且我可以看到编码的图像,但是当我将其放入 json 文件时,图像字符串在遇到“/”时会发生变化,它将其转换为“\ / " 到 json 文件中,如果图像字符串更改行,则 json 文件添加 "\n"。这使得从 json 文件中提取图像字符串以查看图像是不可能的。

ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
  Bitmap bitmap2 = ((BitmapDrawable) secondImageV.getDrawable()).getBitmap();
  bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, baos2);
  byte[] imageBytes2 = baos2.toByteArray();
  imageString2 = Base64.encodeToString(imageBytes2, Base64.DEFAULT);

 sendPost(imageString1,imageString2,sendAlert);

public void sendPost(String im1, String im2, String alert) {

        JSONObject json = new JSONObject();
        try {
            json.put("name", compname.getText());
            json.put("hydrovalue", _hydrometerValue.getText());
            json.put("im1", im1) ;
            json.put("im2", im2);
            json.put("hydrohealth", check1);
            json.put("hydrorepair", check2);
            json.put("hydroalert", alert);
            json.put("stime", stime.getText());
            json.put("etime", etime.getText());
            json.put("comm", _comments.getText());

        } catch (JSONException e) {
            e.printStackTrace();
        }

        String url = "https://api.myjson.com/bins/lmz8i";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, json,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Toast.makeText(getApplicationContext(), "String Response : " + response.toString(), Toast.LENGTH_LONG).show();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "Error getting response", Toast.LENGTH_LONG).show();
            }
        });

【问题讨论】:

  • Base64.encodeToString(imageBytes2, Base64.NO_WRAP); 应该处理意外的换行。如果值在 json 文本中被双引号引起来,/(也可能是+)的转义是没有意义的。转义只对非标准 ID 有意义。

标签: java android json base64


【解决方案1】:

使用 Base64“URL 安全”编码。实例化这些编码器/解码器如下 java.util.Base64.getUrlEncoder 和 java.util.Base64.getUrlDecoder

【讨论】:

  • 感谢小伙伴的快速回复!我尝试了 Base64.URL_SAFE 编码,尽管它超越了符号“\ /”的问题,但当我尝试通过几个在线解码器站点将其解码为图像时,它并没有显示我的图像。
  • 这是它现在返回的方式:api.myjson.com/bins/fz4qe,但在这种格式下我无法将其解码为原始图像...
  • 我在这个 api.myjson.com/bins/fz4qe 上没有看到任何格式良好的 base64 似乎在不同的 base64 之间有 \n 但无论如何使用base64decode.org 我无法获得任何网址。
  • Marco Lettieri 感谢您提供的信息!我通过在图像字符串中使用 replaceAll 方法解决了我的问题: imageString2 = iimageString2 .replaceAll("\\r\\n|\\r|\\n", " "); , 在我将它添加到 json 文件之前。
猜你喜欢
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2015-12-09
  • 2018-07-23
相关资源
最近更新 更多