2012-07-25 18 views
5

ci sono in esecuzione in problemi causati dal bug descritto qui: http://bugs.sun.com/view_bug.do?bug_id=6183404standard di codifica imperativo di Java

mi hanno già attuato una correzione utilizzando un set di caratteri personalizzati per correggere le mappature non corrette. Tuttavia, questo non risolve il problema per un'applicazione Java che stiamo usando, poiché è codificata per utilizzare il set di caratteri "GBK" standard.

È possibile utilizzare java.nio.charset.spi.CharsetProvider per sovrascrivere i set di caratteri standard esistenti?

+0

Forse JRebel? Questo è in grado di cambiare classe in runtime. In questo modo potresti sovrascrivere le classi che desideri. Non l'ho mai usato, ma ho sempre sentito commenti positivi. – 11684

risposta

3

In base a questo codice in Charset, non sembra che sia possibile ignorare lo standardProvider poiché viene cercato prima di qualsiasi altro.

if ((cs = standardProvider.charsetForName(charsetName)) != null || 
    (cs = lookupExtendedCharset(charsetName))   != null || 
    (cs = lookupViaProviders(charsetName))    != null) 

Se l'applicazione memorizza il nome charset in un campo, si potrebbe fare qualcosa di brutto con la riflessione di cambiarlo prima che l'applicazione si avvia.

+0

OK, grazie, questo è quello che sospettavo, ma mi chiedevo se mi fosse sfuggito qualcosa. Sembra che il valore non sia un campo, usando il decompilatore posso vedere la funzione in classe in WAR che sta impostando questo, in particolare 'if (paramString.equals (" 936 ")) restituisce" GBK ";'. Capisco che potrei in qualche modo scavalcare questo, ma preferirei di no. – Patrick

Problemi correlati