Red de conocimiento informático - Problemas con los teléfonos móviles - SVG no puede mostrar chino

SVG no puede mostrar chino

Jóvenes. La función que utiliza es Archivo SVGOutputFile.

Veo que tus imágenes SVG se generan dinámicamente.

Déjame darte un ejemplo y lo entenderás cuando lo pruebes

Veamos tu ejemplo primero

import java.lang.Math;

import java .io.Archivo;

importar java.io.FileWriter;

importar java.util.ArrayList;

importar java.util.List;

importar java.util.Random;

generación de clase pública {

public static void main(String[] args) {

Lista lista= new ArrayList( );

list.add("Matemáticas");

list.add("Chino"); ");

Ruta de cadena="F:\\";

renderSVGGradientOnToLogy("abc", lista, ruta);

}

public static void renderSVGGradientOnToLogy(nombre de usuario de cadena, lista de lista, ruta de cadena) {

//Esta es la coordenada codificada del centro del círculo central, que se puede modificar,

int CirCenterX=500;

int CirCenterY=400;

int r=50; //El radio del círculo

int length= 100; // La longitud del rayo

int LineEndX=0;

int LineEndY=0

int CirSecEndX=0; p> int CirSecEndY=0;

String NewDirectPage="SVGSecInstance.jsp";

int ListAcount=list.size();

// Esto es donde descubrimos cuál es el valor más grande contenido en cada una de las matrices,

// es un bucle simple que recorre cada valor pasado y determina el más alto

try{

// Prepara el archivo SVG para dibujar el gráfico de rendimiento

File SVGOutputFile = new File(path, "SVGOnToLogy.svg"); / Archivo SVGOutputFile =

new File("SVGOnToLogyTest1.svg");

FileWriter SVGout = new FileWriter(SVGOtputFile);

// Prepara el gráfico SVG

SVGout.write ("lt;?xml version=\"1.0\"?gt;");

SVGout.write("\nlt;svg width=\"1300\" height=\"1300\"gt ;");

SVGout.write("\nlt;descgt;Ejemplo de OnToLogy dinámico de trabajos de desarrollador;/descgt;");

//2010-8-8 Se agregó Yin Fuqing efectos especiales

SVGout.write("lt;script type=\"text/javascript\"gt;lt;![CDATA[function changeDescriptionText(evt){ var targetButton = evt.getTarget(); targetButton .setAttribute (\"fill\",\"url(#rainbowRad)\"); }función resetText(){ var targetButton = evt.getTarget(); }// ]]gt;lt;/scriptgt;");

SVGout.write("\nlt;defsgt;\n");

SVGout.write( "\ nlt;radialGradient id=\"rainbowRad\"gt;");

SVGout.write("\n lt;stop offset=\"0\" estilo=\"stop-color: rgb (255 , 0, 0);\"/gt;");

SVGout.write("\n lt;stop offset=\"16.6\" estilo=\"stop-color: naranja\ "/ gt;");

SVGout.write("\n lt;stop offset=\"33.3\" style=\"stop-color: amarillo;\"/gt;");

SVGout.write("\n lt;stop offset=\"50\" style=\"stop-color: verde;\"/gt;");

SVGout. write( "\n lt;stop offset=\"66.6\" style=\"stop-color: #00FFFF\"/gt;");

SVGout.

write("\n lt;stop offset=\"83.3\" style=\"stop-color: azul;\"/gt;");

SVGout.write("\n lt;stop offset=\"100\" style=\"stop-color: indigo;\"/gt;lt;/radialGradientgt;");

//La extracción del círculo se puede realizar debajo de lt;ggt; Medio reutilizar, ampliar desde el primer segundo

SVGout.write("lt;circle id=\"CirSec\" r=\"0\"gt;");

SVGout .write("\nlt; animate atributoName=\"r\" comenzar=\'1s\' to=\"50\" dur=\"1s\" fill=\"freeze\"/gt;"); /p>

SVGout.write("\nlt;/circlegt;\nlt;/defsgt;");

// Esto genera un degradado lineal y radial usando un color aleatorio

//Aquí necesitas calcular cuántos círculos y cuántos rayos necesitas generar en función de la cantidad de elementos de la matriz. El número de círculos y rayos es el mismo

//1 Cuando no hay valor

if(ListAcount==0)

{

SVGout.write("lt;text x=\"" (CirCenterX-25) "\" y=\"" (CirCenterY 5) "\" id=\"ontología\" fill=\"rojo\ " font-size =\"30\"gt;No existe tal registrolt;/textgt;lt;/agt;");

}

else{

// Inicie el lienzo: primero dibuje las líneas y los círculos fuera del círculo del medio, y luego dibuje un círculo del medio en el medio para que las líneas no bloqueen el texto en el medio.

for(int i=1;ilt;=ListAcount;i)

{

if(i==1)//Cuando x es uno, la coordenada y es fija.

{

SVGout.write("\n lt; línea x1=\"" CirCenterX "\" y1=\"" CirCenterY "\" x2=\"" CirCenterX " \" y2=\"" CirCenterY "\" trazo-width=\"2\" trazo=\"azul\" gt;");

SVGout.write("\n lt;animar nombre del atributo =\"x2\" to=\"" (CirCenterX r longitud) "\" dur=\"1s\" fill=\"freeze\"/gt;");

SVGout.write( "lt;/linegt;");

//Modificado por Yin Fuqing el 8 de agosto de 2010, el valor de Instancia se pasa dinámicamente después de ingresar a una nueva página.

//Modificado por Yin Fuqing el 26 de agosto de 2010. Dado que la imagen SVG no se puede mostrar cuando se ingresan caracteres chinos nuevamente, la razón es que el atributo ID de g usa el contenido de la matriz y. no se puede mostrar, por lo que el ID se cambia a Alfanumérico

// SVGout.write("\nlt;ggt; lt;a xlink:href=\"\"gt;"); >

SVGout.write(" \nlt; g id=\"GLogy" (i-1) "\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\ "fill: blue\" gt; lt ;a xlink:href=\"" NewDirectPage "?Instance=" list.get(i-1) "\"gt;");

SVGout.write ("\nlt;ggt;lt; use xlink: href=\"#CirSec\" x=\"" (CirCenterX 2*r longitud) "\" y=\"" CirCenterY "\" /gt; lt; / ggt; ");

SVGout.write("lt; texto id=\"TextLogy" (i-1) "\" x=\"" (CirCenterX 2*r longitud-25) "\ " y=\"" (CirCenterY) "\" visibilidad=\"oculto\" fill=\"red\" font-size=\"20\" style=\"fill:red\"gt;" (i-1) "");

SVGout.write("\n lt;animate atributoName=\"visibilidad\" to=\"visible\" comenzar=\"2s\" dur=\ "1s\" fill=\"congelar \"/gt;");

SVGout.write("lt;/textgt;lt;/agt;lt;/ggt;");

}

else//Cuando no hay uno

{

LineEndX=(int)((Math.cos(2*Math.PI* (i-1)/ListAcount) )*(r longitud) 500);

LineEndY=(int)(400-Math.sin(2*Math.PI*(i-1)/ListAcount) *(r longitud));

CirSecEndX=(int)((Math.cos(2*Math.PI*(i-1)/ListAcount))*(2*r longitud) 500);

CirSecEndY=(int)(400-Math.sin(2*Math.PI*(i-1)/ListAcount)*(2*r longitud));

SVGout.write("\n lt ;línea x1=\"" CirCenterX "\" y1=\"" CirCenterY "\" x2=\"" CirCenterX "\" y2=\"" CirCenterY "\" ancho-trazo=\"2\" trazo=\ "blue\" gt;");

SVGout.write("\n lt; animate atributoName=\"x2\" to=\"" LineEndX "\" dur=\"1s\" fill =\"freeze\"/gt;");

SVGout.write("\n lt;animate atributoName=\"y2\" to=\"" LineEndY "\" dur=\"1s \" fill=\"freeze\"/gt;");

SVGout.write("lt;/linegt;");

//El círculo se genera y se adjunta con conexiones y caracteres en la matriz

//Modificado por Yin Fuqing el 8/8/2010, el valor de Instancia se pasa dinámicamente después de ingresar a la nueva página.

// SVGout.write("\nlt;ggt; lt;a xlink:href=\"\"gt;");

SVGout.write("\nlt; g id=\"GLogy" (i-1) "\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\"fill: blue\"gt; :href=\"" NewDirectPage "?Instance=" list.get(i-1) "\"gt;");

SVGout.write("\nlt;ggt;lt; use xlink: href=\"#CirSec\" x=\"" CirSecEndX "\" y=\"" CirSecEndY "\" /gt; /ggt ");

SVGout.write("lt; ;text id=\"TextLogy" (i-1) "\" x=\"" (CirSecEndX-25) "\" y=\"" (CirSecEndY) "\" visibilidad=\"oculto\" fill=\ "rojo\" font-size=\"20\" estilo=\"fill:rojo\"gt;" list.get(i-1) "");

SVGout.write("\ n lt; animar nombreDeAtributo=\"visibilidad\" to=\"visible\" comenzar=\"2s\" dur=\"1s\" fill=\"freeze\"/gt;");

SVGout.write("lt;/textgt;lt;/agt;lt;/ggt;");

}

}

// Modificado por Yin Fuqing el 8 de agosto de 2010, el valor de Instancia se pasa dinámicamente después de ingresar a una nueva página.

//SVGout.write("\nlt;ggt; lt;a xlink:href=\"\"gt;");

SVGout.write("\nlt; g id=\"GLogyCenter\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\"fill: blue\"gt; a xlink: href=\"" NewDirectPage; "?Instance=" nombre de usuario "\"gt;");

SVGout.write("\n lt;circle cx=\"" CirCenterX "\" cy=\"" CirCenterY "\" r =\"" r "\" fill=\"azul\"gt;lt;/circlegt;");

SVGout.write("lt;text x=\"" (CirCenterX-25) "\" y=\"" (CirCenterY) "\" id=\"ontología\" fill=\"red\" font-size=\"20\" style=\"fill:red\"gt;" nombre de usuario "lt;/textgt;lt;/agt;lt;/ggt;");

}

SVGout.write("\nlt;/svggt;");

p>

SVGout.close();

}

catch (java.io.IOException e){

System. out.println(" Error de excepción IO detectado");

e.printStackTrace()

}

catch (Excepción e)

{

System.out.println("Se detectó un error desconocido");

e.printStackTrace(); >}

}

Pones el código anterior en Java y lo ejecutas. Finalmente, aparecerá un archivo svgontology.svg debajo de la unidad F, que generamos dinámicamente. Haga doble clic en él. Cuando lo abrí en el navegador encontré que no se mostraba correctamente. Luego haga clic derecho para abrir con Editplus. Seleccione Guardar como formato UTF-8, guarde y vea nuevamente en su navegador. La visualización es normal. (Por supuesto, la premisa es que debes instalar el complemento svg). Ahora tenemos otra manera. Puedes dejarle generar directamente el tipo utf-8. No se requiere conversión.

Mira mi código modificado:

importar java.io.FileOutputStream;

importar java.io.OutputStreamWriter;

importar java.util.ArrayList;< / p>

importar java.util.List;

clase pública asdf {

/**

* @param args

*/

public static void main(String[] args) {

Lista lista=new ArrayList();

list.add("Matemáticas " );

list.add("Chino");

list.add("Chino");

String path="F:\\ " ;

renderSVGGradientOnToLogy("abc", list);

}

public static void renderSVGGradientOnToLogy(String nombre de usuario, lista de lista) {

//Aquí están las coordenadas codificadas del centro del círculo central, que se pueden modificar,

int CirCenterX=500;

int CirCenterY=400;

int r=50; //El radio del círculo

int length=100; //La longitud del rayo

int LineEndX=0;

int LineEndY=0;

int CirSecEndX=0

int CirSecEndY=0

Cadena NewDirectPage="SVGSecInstance.jsp"; /p>

int ListAcount= list.size();

String path="F:\\SVGOnToLogy.svg";

// Aquí es donde lo descubrimos cuál es el valor más grande contenido en cada una de las matrices,

// es un bucle simple que recorre cada valor pasado y determina el más alto

try{

// Prepara el archivo SVG para dibujar el gráfico de rendimiento

OutputStreamWriter out = new OutputStreamWriter(

new FileOutputS

tream(path), "UTF-8");

// Prepara el gráfico SVG

out.write("lt;?xml version=\"1.0\"? gt;");

out.write("\nlt; svg width=\"1300\" height=\"1300\"gt;");

out.write ("\nlt;descgt;Ejemplo de OnToLogy dinámico de trabajos de desarrollador;/descgt;");

//2010-8-8 Yin Fuqing agregó efectos especiales

out.write(" lt; tipo de script=\"text/javascript\"gt;lt;![CDATA[function changeDescriptionText(evt){ var targetButton = evt.getTarget(); rainbowRad) \"); }función resetText(){ var targetButton = evt.getTarget(); targetButton.setAttribute(\"fill\",\"blue\");}// ]]gt; lt; /scriptgt; ") ;

out.write("\nlt;defsgt;\n");

out.write("\nlt;radialGradient id=\"rainbowRad\"gt; ") ;

out.write("\n lt;stop offset=\"0\" style=\"stop-color: rgb(255, 0, 0);\"/gt;"

out.write("\n lt; stop offset=\"16.6\" style=\"stop-color: naranja\"/gt;"); out("\n lt;stop offset=\"33.3\" style=\"stop-color: amarillo;\"/gt;");

out.write("\n lt ;stop offset=\"50\" style=\"stop-color: verde;\"/gt;");

out.write("\n lt;stop offset=\"66.6\ " style =\"stop-color: #00FFFF\"/gt;");

out.write("\n lt;stop offset=\"83.3\" style=\"stop-color : azul ;\"/gt;");

out.write("\n lt;stop offset=\"1

00\" style=\"stop-color: indigo;\"/gt;lt;/radialGradientgt;");

//La extracción de círculos se puede reutilizar en los siguientes lt;ggt;, desde Comience a acercar el zoom en el primer segundo

out.write("lt;circle id=\"CirSec\" r=\"0\"gt;");

out .write( "\nlt; animate atributoName=\"r\" comenzar=\'1s\' to=\"50\" dur=\"1s\" fill=\"freeze\"/gt;");

out.write("\nlt;/circlegt;\nlt;/defsgt;");

// Esto genera un degradado lineal y radial usando un color aleatorio

// Aquí debe calcular cuántos círculos y rayos necesita generar en función de la cantidad de elementos de la matriz. El número de círculos y rayos es el mismo

//1 Cuando no hay valor

if(ListAcount==0)

{

out.write("lt;text x=\"" (CirCenterX-25) "\" y=\"" (CirCenterY 5) "\" id=\"ontología\" fill=\"rojo\ " font-size =\"30\"gt;No existe tal registrolt;/textgt;lt;/agt;");

}

else{

// Inicie el lienzo: primero dibuje las líneas y los círculos fuera del círculo del medio, y luego dibuje un círculo del medio en el medio para que las líneas no bloqueen el texto en el medio.

for(int i=1;ilt;=ListAcount;i)

{

if(i==1)//Cuando x es uno, la coordenada y es fija.

{

out.write("\n lt; line x1=\"" CirCenterX "\" y1=\"" CirCenterY "\" x2=\"" CirCenterX " \" y2=\"" CirCenterY "\" trazo-width=\"2\" trazo=\"azul\" gt;");

out.write("\n lt;animar nombre del atributo =\"x2\" to=\"" (CirCenterX r longitud) "\" dur=\"1s\" fill=\"freeze\"/gt;");

out.write( "lt;/linegt;");

//Modificado por Yin Fuqing el 8 de agosto de 2010, el valor de Instancia se pasa dinámicamente después de ingresar a una nueva página.

//Modificado por Yin Fuqing el 26 de agosto de 2010. Dado que la imagen SVG no se puede mostrar cuando se ingresan caracteres chinos nuevamente, la razón es que el atributo ID de g usa el contenido de la matriz y. no se puede mostrar, por lo que el ID se cambia a Alfanumérico

// out.write("\nlt;ggt; lt;a xlink:href=\"\"gt;"); >

out.write(" \nlt; g id=\"GLogy" (i-1) "\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\ "fill: blue\" gt; lt ;a xlink:href=\"" NewDirectPage "?Instance=" list.get(i-1) "\"gt;");

out.write ("\nlt;ggt;lt; use xlink: href=\"#CirSec\" x=\"" (CirCenterX 2*r longitud) "\" y=\"" CirCenterY "\" /gt; lt; / ggt; ");

out.write("lt;text id=\"TextLogy" (i-1) "\" x=\"" (CirCenterX 2*r longitud-25) "\ " y=\"" (CirCenterY) "\" visibilidad=\"oculto\" fill=\"red\" font-size=\"20\" style=\"fill:red\"gt;" (i-1) "");

out.write("\n lt;animate atributoName=\"visibilidad\" to=\"visible\" comenzar=\"2s\" dur=\ "1s\" fill=\"congelar \"/gt;");

out.write("lt;/textgt;lt;/agt;lt;/ggt;");

}

else//Cuando no hay uno

{

LineEndX=(int)((Math.cos(2*Math.PI* (i-1)/ListAcount) )*(r longitud) 500);

LineEndY=(int)(400-Math.sin(2*Math.PI*(i-1)/ListAcount) *(r longitud));

CirSecEndX=(int)((Math.cos(2*Math.PI*(i-1)/ListAcount))*(2*r longitud) 500);

CirSe

cEndY=(int)(400-Math.sin(2*Math.PI*(i-1)/ListAcount)*(2*r longitud));

out.write("\n lt ;línea x1=\"" CirCenterX "\" y1=\"" CirCenterY "\" x2=\"" CirCenterX "\" y2=\"" CirCenterY "\" ancho-trazo=\"2\" trazo=\ "blue\" gt;");

out.write("\n lt; animate atributoName=\"x2\" to=\"" LineEndX "\" dur=\"1s\" fill =\"congelar\"/gt;");

out.write("\n lt;animate atributoName=\"y2\" to=\"" LineEndY "\" dur=\"1s \" fill=\"freeze\"/gt;");

out.write("lt;/linegt;");

//El círculo se genera y se adjunta con conexiones y caracteres en la matriz

//Modificado por Yin Fuqing el 8/8/2010, el valor de Instancia se pasa dinámicamente después de ingresar a la nueva página.

// out.write("\nlt;ggt; lt;a xlink:href=\"\"gt;");

out.write("\nlt; g id=\"GLogy" (i-1) "\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\"fill: blue\"gt; :href=\"" NewDirectPage "?Instance=" list.get(i-1) "\"gt;");

out.write("\nlt;ggt;lt; use xlink: href=\"#CirSec\" x=\"" CirSecEndX "\" y=\"" CirSecEndY "\" /gt;

out.write("lt; ;text id=\"TextLogy" (i-1) "\" x=\"" (CirSecEndX-25) "\" y=\"" (CirSecEndY) "\" visibilidad=\"oculto\" fill=\ "rojo\" font-size=\"20\" estilo=\"fill:rojo\"gt;" list.get(i-1) "");

out.write("\ n lt; animar nombreDeAtributo=\"visibilidad\" to=\"visible\" comenzar=\"2s\" dur=\"1s\" fill=\"freeze\"/gt;");

out.write("lt;/textgt;lt;/agt;lt;/ggt;");

}

}

// Modificado por Yin Fuqing el 8 de agosto de 2010, el valor de Instancia se pasa dinámicamente después de ingresar a una nueva página.

//out.write("\nlt;ggt; lt;a xlink:href=\"\"gt;");

out.write("\nlt; g id=\"GLogyCenter\" onmouseover=\"changeDescriptionText(evt)\" onmouseout=\"resetText(evt)\" style=\"fill: blue\"gt; a xlink: href=\"" NewDirectPage; "?Instance=" nombre de usuario "\"gt;");

out.write("\n lt;circle cx=\"" CirCenterX "\" cy=\"" CirCenterY "\" r =\"" r "\" fill=\"azul\"gt;lt;/circlegt;");

out.write("lt;text x=\"" (CirCenterX-25) "\" y=\"" (CirCenterY) "\" id=\"ontología\" fill=\"red\" font-size=\"20\" style=\"fill:red\"gt;" nombre de usuario "lt;/textgt;lt;/agt;lt;/ggt;");

}

out.write("\nlt;/svggt;");

p>

out.close();

}

catch (java.io.IOException e){

System. out.println(" Error de excepción IO detectado");

e.printStackTrace()

}

catch (Excepción e)

{

System.out.println("Se detectó un error desconocido");

e.printStackTrace(); >}

}

Está bien, ¡pruébalo! ¡Vea si puede navegar en chino directamente sin guardar! ! !