2012-07-25 15 views
5

Biegniemy do problemów spowodowanych przez błąd opisany tutaj: http://bugs.sun.com/view_bug.do?bug_id=6183404standardem kodowania Zastępowanie w Javie

już wprowadziła poprawkę przy użyciu niestandardowego charset naprawić niepoprawne mapowania. Jednak to nadal nie rozwiązuje problemu dla jednej aplikacji Java, której używamy, ponieważ jest to zakodowane na stałe przy użyciu standardowego zestawu znaków "GBK".

Czy istnieje sposób na zastąpienie istniejących standardowych zestawów znaków za pomocą java.nio.charset.spi.CharsetProvider?

+0

Być może JRebel? To jest w stanie zmienić klasy w środowisku wykonawczym. W ten sposób możesz zastąpić wybrane klasy. Nigdy go nie używałem, ale zawsze słyszałem pozytywne komentarze. – 11684

Odpowiedz

3

Na podstawie tego kodu w Charset, nie wygląda na to, że można zastąpić standardProvider, ponieważ zostanie przeszukany przed dodatkowymi.

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

Jeśli sklepach aplikacji nazwa charset w polu, można zrobić coś niedobrego z odbicia go zmienić zanim rozpocznie się aplikacja.

+0

OK, dzięki, to jest to, co podejrzewałem, ale zastanawiałem się, czy coś przeoczyłem. Wydaje się, że wartość nie jest polem, używając dekompilatora, widzę funkcję w klasie w WAR, która to ustawia, w szczególności 'if (paramString.equals (" 936 ")) zwraca" GBK ";'. Rozumiem, że mogłem jakoś to zmienić, ale wolałbym nie. – Patrick