2012-07-25 35 views
5

我們走入造成這裏所描述的錯誤問題:http://bugs.sun.com/view_bug.do?bug_id=6183404重載標準編碼在Java中

我已經使用自定義字符集來解決不正確的映射已經實施了修復。 但是,這仍然不能解決我們正在使用的一個Java應用程序的問題,因爲這是硬編碼使用標準的「GBK」字符集。

有什麼方法可以使用java.nio.charset.spi.CharsetProvider覆蓋現有的標準字符集?

+0

也許JRebel?這可以在運行時改變類。這樣你可以覆蓋你想要的類。我從來沒有用過它,但我總是聽到積極的評論。 – 11684 2012-07-25 09:02:36

回答

3

根據Charset中的這段代碼,它看起來並不像你可以重寫standardProvider,因爲它在任何其他的之前被搜索過。

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

如果應用程序商店的字符集的名稱在一個領域,你可以做一些討厭與反射的應用程序啓動之前改變它。

+0

好的,謝謝,那就是我所懷疑的,但只是想知道我是否錯過了一些東西。看起來值不是一個字段,使用反編譯器我可以在WAR中看到函數在設置這個,特別是'if(paramString.equals(「936」))return「GBK」;'。瞭解我可以以某種方式重寫這個,但寧願不。 – Patrick 2012-07-25 09:46:07