将UTF-8转换为String

时间:2016-01-29 16:12:24

标签: java utf-8 character-encoding

我尝试了Stack Overflow的很多解决方案,但无法解决问题。 我有一个值为title的JSON对象,UTF-8,我需要将其转换为Java字符串:

{"id":"118","title":"\u00c7\u00c0\u00c7"}

我最终采用了这种方法,但它不起作用:

String title = new String(JsonObj.getString("title").getBytes(), "US-ASCII"); 

String title = new String(JsonObj.getString("title").getBytes());

英文标题正确显示为Wartburg,Wiesmann,Xin Kai。俄语显示为ÂÀÇ,Âåëòà,ÃÀÇ

有什么问题,如何将其转换为普通字符?

编辑:

以下是我收到JSON的方式

 JSONObject jsonObject = new JSONObject();

            try {

                //                sending empty JSON in this request
                String jsonRequest = jsonObject.toString();
                Log.v(LOG_TAG, "JSON: " + jsonRequest);

                URL url = new URL(STRING_URL);

                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("POST");

                //  hashing the signature
                String md5Signature = MD5Utils.md5Apache(KEY + jsonRequest);

                //                setting heading property
                urlConnection.setRequestProperty(AA_SIGNATURE, md5Signature);

                urlConnection.setDoOutput(true);
                DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
                wr.writeBytes(jsonRequest);
                wr.flush();
                wr.close();

                //            read the inputshtream into the String
                InputStream inputStream = urlConnection.getInputStream();

                if (inputStream == null) {
                    //                nothing to do
                    return null;
                }

                reader = new BufferedReader(
                        new InputStreamReader(inputStream));

                String inputLine;
                StringBuffer buffer = new StringBuffer();

                while ((inputLine = reader.readLine()) != null) {
                    buffer.append(inputLine);
                }

                if (buffer.length() == 0) {
                    // Stream was empty
                    return null;
                }

                // String buffer
                String responseJsonStr = buffer.toString();
                Log.v(LOG_TAG, "Final String buffer: " + responseJsonStr);


                //                trying to parse json string and return result
                try {
                    return getCarBrandsOrModelsFromJson(responseJsonStr);
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                if (urlConnection != null) {
                    urlConnection.disconnect();
                }

                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        Log.e(LOG_TAG, "Error closing stream");
                    }
                }
            }
            return null;
        }

以下是我如何解析

 private HashMap<String, Integer> getCarBrandsOrModelsFromJson(String carBrandsOrModelsJsonStr) throws JSONException {

        //        these are the names of JSON objects needed to be extracted
        final String AA_DATA = "data";
        final String AA_TITLE = "title";
        final String AA_ID = "id";

        JSONObject carBrandsJson = new JSONObject(carBrandsOrModelsJsonStr);
        JSONArray brandsArray = carBrandsJson.getJSONArray(AA_DATA);

        HashMap<String, Integer> carBrandsMap = new HashMap<String, Integer>();

        for (int i = 0; i < brandsArray.length(); i++) {

            String brand = null;
            Integer id;

            //            Get the JSON object representing the one brand
            JSONObject oneBrandJson = brandsArray.getJSONObject(i);

            //            getting brand and id

            // ===================>>> ?
            brand = new String(oneBrandJson.getString(AA_TITLE).getBytes(), "UTF8");
            //            brand = oneBrandJson.getString(AA_TITLE);
            brand = oneBrandJson.getString(AA_TITLE);

            id = oneBrandJson.getInt(AA_ID);

            //            adding brand and id into hashmap
            carBrandsMap.put(brand, id);
        }

        //        Logging result
        for (Map.Entry<String, Integer> entry : carBrandsMap.entrySet()) {
            Log.v(LOG_TAG, ("\n" + entry.getKey() + " / " + entry.getValue()));
        }

        return carBrandsMap;
    }

1 个答案:

答案 0 :(得分:2)

以下代码从Unicode转换为UTF-8。

String original = JsonObj.getString("title");
try {
   byte[] utf8Bytes = original.getBytes("UTF-8");
   String roundTrip = new String(utf8Bytes, "UTF-8");
} 
catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

编辑:

似乎您的Unicode字符串之前已编码为cp1252。要解码它,你应该使用

String roundTrip = new String(utf8Bytes);
byte[] bytes= roundTrip.getBytes("cp1252");
String roundTrip2 = new String(bytes, "cp1251");