@Ujian
ujian kekosongan awam333(){
String a="青白";
cuba {
bait[] b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));
} tangkapan (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
//Tukar tatasusunan bait kepada rentetan perenambelasan
String statik awam baitToHexFun1(bait[] bait) {
char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
// Satu bait ialah 8 bit dan boleh dikenal pasti dengan dua digit heksadesimal
char[] buf = aksara baharu[bytes.length * 2];
int a = 0;
int indeks = 0;
for(bait b : bait) { // Tukar menggunakan pembahagian dan baki
jika(b
a = 256 + b;
} lain {
a = b;
}
buf[index++] = HEX_CHAR[a/16];
buf[index++] = HEX_CHAR[a % 16];
}
kembalikan String(buf) baharu.
}
Idea utama ialah menukarnya terlebih dahulu menjadi tatasusunan GB2312 bait, dan kemudian menukarnya menjadi perenambelasan.
1. Keluarkan bahasa Cina di halaman web.
Pengekodan yang digunakan oleh JAVA dalam penghantaran rangkaian ialah "ISO-8859-1", jadi ia perlu ditukar semasa mengeluarkan, seperti:
String str="中文";
str=new String(str.getBytes("GB2312"),"8859_1");
Tetapi jika pengekodan yang digunakan semasa menyusun atur cara adalah "GB2312" dan program dijalankan pada platform Cina, masalah ini tidak akan berlaku, jadi pastikan anda memberi perhatian.
2. Baca bahasa Cina daripada parameter
Ini betul-betul bertentangan dengan output pada halaman web:
str=new String(str.getBytes("8859_1"),"GB2312");
3 Uruskan isu Cina dalam DB
Kaedah yang lebih mudah ialah: dalam "Panel Kawalan", tetapkan "Wilayah" kepada "Bahasa Inggeris (Amerika Syarikat)". Jika aksara bercelaru masih muncul, anda juga boleh membuat tetapan berikut:
Apabila mendapat bahasa Cina: str=new String(str.getBytes("GB2312"));
Masukkan bahasa Cina ke dalam DB: str=new String(str.getBytes("ISO-8859-1"));
4 penyelesaian Cina dalam jsp:
Dalam "Panel Kawalan", tetapkan "Wilayah" kepada "Bahasa Inggeris (Amerika Syarikat)".
Tambah ke halaman JSP:
Jika masih tidak dapat dipaparkan seperti biasa, penukaran berikut mesti dilakukan:
Contohnya: name=new String(name.getBytes("ISO-8859-1"),"GBK");
Tiada masalah Cina.
Saya jumpa satu dalam talian, cubalah:
/**
* unicode ke rentetan
* @param str
* @kembali
*/
String statik awam unicode2Str(String str) {
StringBuffer sb = StringBuffer();
String[] arr = str.split("\\u");
int len = arr.length;
sb.append(arr[0]);
untuk(int i=1; i String tmp = arr[i]; char c = (char)Integer.parseInt(tmp.substring(0, 4), 16); sb.append(c); sb.append(tmp.substring(4)); } kembali sb.toString(); } /** * Tukar rentetan kepada unicode * @param str * @kembali */ String statik awam str2Unicode(String str) { StringBuffer sb = StringBuffer(); char[] charArr = str.toCharArray(); untuk (char ch : charArr) { jika (ch > 128) { sb.append("\u" + Integer.toHexString(ch)); } lain { sb.append(ch); } } kembali sb.toString(); } utama kekosongan statik awam(String[] args) { System.out.println(str2Unicode("222dstest1testaa")); String str = "u6d4b1u8bd5aa"; System.out.println(unicode2Str(str)); }
Atas ialah kandungan terperinci Bagaimana untuk menukar rentetan kepada pengekodan GB2312 di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!