Pertanyaan Karakter Unicode muncul sebagai Tanda Pertanyaan di Java JSON Parsing


Saya telah mencari tentang ini selama beberapa hari terakhir tetapi saya tidak berpikir saya dapat menemukan penunjuk yang benar. Silakan gabungkan dengan pertanyaan yang sesuai jika ditemukan sebagai duplikat.

Saya cukup baru untuk bekerja dengan JSON dan sebagai bagian dari salah satu proyek saya, saya perlu men-decode file JSON dan melakukan pemrosesan lebih lanjut di atasnya. Namun ketika saya mencoba decoding menggunakan pustaka Json-sederhana, saya mendapatkan beberapa tanda tanya aneh di objek yang diurai bukan karakter yang sebenarnya. Kode contoh ditunjukkan di bawah ini:

String str = "{\"alias\": [\"Evr\u00f3pa\", \"\u05d0\u05d9\u05e8\u05d5\u05e4\"]}";
JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject)parser.parse(str);

System.out.println(jsonObject) gives {"alias":["Evrópa","?????"]}

Saya mencoba menggunakan Json-lib juga dengan hasil yang sama.

Terima kasih untuk bantuannya.


5
2017-08-08 15:30


asal


Jawaban:


Masalahnya bukan dengan JSON Anda, itu dengan System.out.println Anda (). Karakter-karakter itu tidak dapat direpresentasikan dalam karakter yang mengkodekan salah satu terminal Anda (atau IDE Anda, jika itu adalah tempat Anda menjalankannya) atau dari pengkodean yang digunakan oleh System.out di lingkungan Anda.

File tidak dapat berisi karakter Unicode. File adalah aliran byte, tapi Unicode karakter adalah beberapa byte (biasanya dua) dalam ukuran. Di sinilah pengkodean karakter menjadi relevan. Karakter Unicode harus dikonversi ke urutan byte untuk menuliskannya ke file (termasuk System.out). Salah satu pengkodean yang paling umum digunakan untuk karakter Unicode adalah UTF-8. Trik untuk pemrogram perangkat lunak adalah selalu menggunakan pengkodean karakter yang benar saat mengkonversi antara byte dan karakter. Kurangnya pengkodean yang benar di satu tempat, misalnya dalam panggilan debug println (), akan memberikan keluaran yang salah dan menyesatkan.


7
2017-08-08 16:24



Anda mungkin menggunakan set karakter default yang tidak mendukung grup karakter khusus. Coba gunakan UTF-8 sebagai charset Anda, sesuatu di sepanjang baris ini:

String str = "{\"alias\": [\"Evr\u00f3pa\", \"\u05d0\u05d9\u05e8\u05d5\u05e4\"]}";
InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(str.getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8"));
JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject)parser.parse(isr);

0
2017-08-08 16:16