Java 两系统接口调用字符乱码问题?
PHP中文网
PHP中文网 2017-04-18 10:03:23
0
4
415
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(4)
伊谢尔伦

Anda perlu memahami maksud String baharu(str.getBytes("GBK"),"UTF-8");
Pertama sekali, String dalam Java dikodkan secara dalaman dalam UTF-16LE.
str.getBytes("GBK"), memperoleh tatasusunan Byte, kandungannya adalah untuk menukar pengekodan str kepada GBK.
String(str.getBytes("GBK"),"UTF-8") baharu merawat kandungan tatasusunan Byte ini sebagai data berkod UTF-8 dan menukarkannya kepada String (UTF-16LE).
Faham? Jika ini berfungsi, maka akan ada hantu.

Pelanggan dan pelayan kedua-duanya adalah Java, jadi pengekodan String dalam Java mestilah UTF-16. Tidak terjejas oleh pengekodan sistem (Windows atau Linux).
Dalam kes ini, sebaiknya jangan hantar String terus, kerana String akan ditukar secara automatik kepada pengekodan oleh pustaka yang anda gunakan (ambil tomcat sebagai contoh, iso8859-1 lalai).

Jika anda boleh menghantar dan menerima tatasusunan Byte secara langsung , maka anda pasti boleh UTF-8 spesifikasi protokol. Data yang diterima oleh mana-mana pihak ialah String(data, "UTF-8") baharu dan data yang dihantar ialah str.getBytes("UTF-8").

Jika anda tidak boleh menukar kod klien atau ia ditulis dalam C atau bahasa lain. Jika anda pasti pelanggan menghantar data GBK. Jika pelayan anda boleh terus menerima tatasusunan Byte , String(data, "GBK") baharu boleh dihuraikan. Apabila dikembalikan, ia juga ialah tatasusunan Byte str.getBytes("GBK").

Jika anda hanya boleh menghantar dan menerima String, maka anda perlu mengkonfigurasinya dan menetapkan pengekodan yang ditukarnya. Contohnya, untuk tomcat, untuk data GET, web.xml perlu diubah suai dan item tetapan pengekodan URL perlu ditambah. Untuk data POST, , anda mesti menulis penapis untuk menukar . Jika ia adalah kelas komunikasi HTTP, ia mungkin menyediakan kaedah seperti SetEncoding.

Ty80

Jika ia URL, anda boleh menggunakan kelas URLEncoder/URLDecoder

左手右手慢动作

Jika anda adalah pelanggan:
Rentetan yang anda dapat daripada pelayan adalah dikodkan UTF-8 Jika anda perlu memaparkannya, mula-mula menyahkod rentetan itu kepada kod bait mengikut UTF-8, dan kemudian ikuti pengekodan GBK.
Rentetan yang anda hantar ke pelayan juga mestilah dikodkan utf-8 Anda perlu menyahkod rentetan yang dikodkan GBK anda kepada kod bait dan kemudian mengekodnya mengikut utf-8.
Sebaliknya.
Sebab mengapa anda melihat aksara bercelaru mungkin adalah masalah pengekodan terminal anda?

String gbkStr = new String(utf8Str.getBytes("utf-8"),"gbk");  
String utf8Str = new String(gbkStr.getBytes("gbk"),"utf-8");  
迷茫

Boleh dikodkan oleh iso8859-1 sebagai rentetan perantaraan Jika gbk ditukar terus kepada utf–8, iaitu, 2 bait ditukar kepada 3 bait. Jika terdapat bilangan ganjil aksara Cina, adakah output ralat akan dikira semasa menukar bait terakhir? , ia masih akan bercelaru.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!