2012-07-25 13 views
5

Nos estamos quedando en problemas causados ​​por el insecto se describe aquí: http://bugs.sun.com/view_bug.do?bug_id=6183404estándar de codificación de Anulación en Java

que ya han implementado un arreglo mediante un conjunto de caracteres a medida para fijar las asignaciones incorrectas. Sin embargo, esto todavía no soluciona el problema para una aplicación Java que estamos usando, ya que está codificada para usar el juego de caracteres "GBK" estándar.

¿Hay alguna forma de utilizar java.nio.charset.spi.CharsetProvider para anular conjuntos de caracteres estándar existentes?

+0

¿Quizás JRebel? Eso es capaz de cambiar las clases en tiempo de ejecución. De esta forma, podría anular las clases que desee. Nunca lo usé, pero siempre escuché comentarios positivos. – 11684

Respuesta

3

Según este código en Charset, no parece que pueda anular el StandardProvider, ya que se busca antes que los adicionales.

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

Si la aplicación almacena el nombre de conjunto de caracteres en un campo, se podría hacer algo desagradable con la reflexión de cambiarlo antes de la aplicación se inicia.

+0

Bien, gracias, eso es lo que sospechaba, pero solo me preguntaba si me había perdido algo. Parece que el valor no es un campo, usando descompilador Puedo ver la función en la clase en WAR que está configurando esto, específicamente 'if (paramString.equals (" 936 ")) devuelve" GBK ";'. Entiendo que de alguna manera podría anular esto, pero preferiría no hacerlo. – Patrick