Terdapat sedikit keraguan tentang bagaimana penapis servlet di Java menyelesaikan masalah aksara Cina yang kacau-bilau Adakah perlu menggunakan entrySet traversal di sini?
習慣沉默
習慣沉默 2017-05-27 17:41:44
0
2
1100

Kod penapis untuk menyelesaikan masalah aksara Cina bercelaru yang terdapat di Internet mempunyai perenggan yang serupa dengan yang berikut:

Map<String,String[]> map = request.getParameterMap();//获取有乱码的map  
if(isNotEncode){//只能在第一次解决乱码  
    for(Map.Entry<String, String[]> entry : map.entrySet()){//遍历map,解决所有值的乱码  
        String [] vs = entry.getValue();  
        for(int i=0;i<vs.length;i++){  
            vs[i] = new String(vs[i].getBytes("iso8859-1"),encode);  
        }  
    }  
    isNotEncode = false;//设置为false,第二次就不会再进这个代码块了  
}  
return map;  

Di sini kami hanya mengubah suai set nilai dalam peta Set nilai ini ialah koleksi tatasusunan String. Saya rasa tidak perlu mengeluarkan entriSet dan melintasinya Anda boleh mencapai kesan yang sama dengan hanya mengeluarkan Nilai dan melintasinya. Saya mengamalkannya sendiri dan mengesahkan sangkaan saya. Tetapi hampir semua maklumat yang saya lihat di Internet merentasi entrySet Mengapa ini? Adakah terdapat sebarang kelemahan dalam hanya merentasi Nilai set nilai? Saya harap pakar dapat menjelaskan kekeliruan!

習慣沉默
習慣沉默

membalas semua(2)
淡淡烟草味

Ini yang anda maksudkan:

for (String[] values : map.values()) {
    for (int i = 0; i < values.length; i ++) {
        values[i] = new String(values[i].getBytes(StandardCharsets.ISO_8859_1, encode));
    }
}

Saya rasa tiada apa-apa yang salah dengannya.

给我你的怀抱

Sama sekali tidak perlu, lihat kod sumber SetCharacterEncodingFilter Tomcat

request.setCharacterEncoding(...)

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan