O código de lixo é uma dor de cabeça. Este artigo apresenta uma solução para o problema dos chineses ilegais no MVC da primavera, que é o seguinte:
1: A solução para o código distorcido depois que o controlador de envio do formulário obtém parâmetros chineses
Nota: a codificação da página JSP está definida como UTF-8
O método de envio do formulário deve ser postado. O filtro de codificação da mola sob o método get não tem nenhum efeito
<%@ Page Language = "java" import = "java.util.
Modificar web.xml e adicione filtros de codificação da seguinte forma (observe que você precisa definir o valor do parâmetro forcencoding como true)
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>orgspringframeworkwebfilterCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <init-param> <amam-name> forcencoding </amam-name> <amam-value> true </amam-value> </irit-param> </filter> <filter-mapping> <filter-name> caracterencodingfilter </filter-name> <url-pattern>/*</url-pattern> </filter-Mapping>
Nota: O banco de dados que codifica suporta chinês
As tabelas de banco de dados e os campos de tabela estão corretos?
Modifique as configurações de parâmetros do banco de dados de conexão de configuração:
<propriedade name = "url" value = "jdbc: mysql: // localhost: 3306/dbname? useunicode = true & caracterEncoding = utf-8"> </propriedade>
O primeiro caso:
Digite a página JSP em chinês e insira o código contornado do controlador. No momento, o que você precisa definir é adicionar um filtro codificado (filtro) para unificar a codificação no UTF-8. O código é o seguinte:
Arquivo de configuração web.xml:
<filter> <filter-name> caracterencodingfilter </filter-name> <filter-Class> orgspringframeworkwebfiltercharacterencodingfilter </filter-class> <iit-param> <amam-name> codificação </par AM-NAME> <MARAM-VALUE> UTF-8 </param-value> </irit-param> </filter> <filter-Mapping> <filter-name> caracterencodingfilter </ftrhter-name> <url-pattern>/*</url-tattern> </filter-mapping>
Deve -se notar aqui que é melhor colocar esse código no início do webxml, porque há uma ordem de interceptação e, se colocada na parte traseira, é fácil bloqueá -lo.
O segundo caso:
Dados do banco de dados Dados chineses, a página JSP exibe código ilegal (não iluminado código no sentido estrito, mas é apresentado na forma de um ponto de interrogação)
Como a interação de dados entre a frente e o back -end usa dados JSON, não sei muito sobre o motivo dessa situação. Eu nunca o encontrei antes. Só posso me culpar por ter feito muito poucos projetos, e não é difícil resolvê -lo. Eu só preciso definir o formato de codificação ao converter JSON. O código é o seguinte:
ResponsesetContentType ("Application/json; charset = utf-8"); // impedindo a transmissão de dados do código distorcidoSe você escrever esta frase, não terá códigos distorcidos novamente.
A terceira situação:
A página também está correta para passá -la para o controlador, mas depois de salvá -lo no banco de dados, ela será iluminada (não é um código iluminado rigoroso, assim como o acima, há todos os pontos de interrogação)
Esse problema me incomodou por um tempo. Comecei a sentir que o formato de codificação do banco de dados está incorreto. Ainda não é possível recriar o banco de dados com o formato de codificação do UTF-8. Finalmente, senti que era um problema com Jboss. Nosso servidor usa JBoss. Pesquisei na Internet e adicionei o formato de codificação ao me conectar à fonte de dados. O código é o seguinte:
<DataSource JTA = "true" jndi-name = "java: jboss/datasources/jcmysqlds" pool-name = "jcmysqlds" habilitado = "true" use-Java-Context = "true"> <neconoms-url> jdbc: mysql: // 46/itoo_basic_basic? useunicode = true & caracterencoding = utf-8 </conexão-url> <rive> mysql </river> <pool> <pref III> FALSO </prefill> <se use-strict-minim> false </se use-strict-minin> <lgo e flush-strategy> FailingConnectionOnly href = "http: // wwwitnet/edu/ebg/" target = "_ blank"> word </a>> 123456 </pass <a href = "http: // wwwitnet/edu/ebg/" target "_blank> word </a>> </screamold> </dats> </dats> </dats> </dats> </dats> </dats> </ra -scort)
1. Página iluminada
As páginas são relativamente fáceis de resolver e geralmente configuram conjuntos de caracteres relevantes na página JSP correspondente ou na página HTML. como
%@página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%
2.
Durante o processo de transmissão de valor, os códigos ilegais também aparecem com frequência. Sem mencionar o que é cenário, as soluções comumente usadas incluem as seguintes configurações especificadas de filtros
<!-Configure o filtro de solicitação, defina o formato de codificação como UTF-8, evite os chineses iluminados-> <filter> <filter-name> Springutf8Encoding </filter-Name> <filter-Class> orgspringframeworkwebfiltercharacterenCodingfilter </stilter-class> <inter-Param> <amanname> <Maver-Value> utf-8 </amam-value> </irit--param> <itirm-param> <itir--param> <amam-name> forcencoding </amam-name> <amam-value> true </amam-value> </irit-param> </filter>
Definir o conjunto de caracteres de solicitação
Freqüentemente, depois de passá -lo da recepção para o controlador ou ação correspondente, o código ilegal aparece. Minha idéia geral é imprimir o conjunto de caracteres padrão da solicitação primeiro.
SystemOutPrintln (requestGecharacterencoding ());
Então, de acordo com a situação, se o conjunto de caracteres necessário não estiver impresso, defina o conjunto de caracteres correspondente.
requestSetcharacterencoding ("UTF-8");Obviamente, algumas situações não podem ser resolvidas. Você pode usar o seguinte
String str = NewsTring ((RequestGetParameter ("BigQuestionTypeName")) GetBytes ("ISO-8859-1"), "UTF-8")3. Salve o código Glebled
Isso é relativamente complicado. Aqui, LZ usa o MySQL, e o MySQL é usado para introduzir como resolver esse problema ilegível
Como todos sabemos, se é puro JDBC, Hibernate ou JPA, é melhor usá -lo na parte inferior. De fato, é essencialmente o JDBC, e a estrutura correspondente é encapsulada apenas de forma relevante. Portanto, não importa que tipo de tecnologia seja, ele usará o URL conectado ao banco de dados. Portanto, o URL precisa ser verificado primeiro
url
A situação padrão adicionará as configurações correspondentes do conjunto de caracteres após a situação correspondente, como segue
jdbcurl = jdbc: mysql: /// itcastoa? useunicode = true & caracterizador = utf-8
Como mencionado acima, o UseUnicode precisa ser conectado ao caractere definido no banco de dados, e o que é isso? Este é um problema, no XML & é o caráter de fuga de &. Se você usar o XML para configurar a configuração correspondente de conexão do banco de dados, esse é o problema. Mas se você usar as propriedades **, haverá um problema e você deverá remover o amplificador. Esta é realmente a experiência de LZ ter uma cabeça ensanguentada.
banco de dados
O problema aqui também é relativamente difícil de lidar. Faça login no banco de dados
Exibir formato de codificação de banco de dados
) 1 dia SQL> "=" ">
Você pode ver se o conjunto de caracteres do servidor é Latin1. Aqui precisamos falar sobre os conjuntos de caracteres comumente usados.
Para a paz e a prosperidade do mundo, a organização ISO designou uma solução de conjunto de caracteres Unicode. A codificação do Unicode é uma ponte de comunicação mútua e conversão entre diferentes codificações, incluindo binário de 32 bits, para que possa acomodar caracteres ao poder de 2, o que é suficiente para a vida. O Unicode é dividido em três soluções de acordo com diferentes necessidades.
UTF8: usado para resolver a codificação que aparece em diferentes idiomas internacionalmente. Para o inglês, 8 dígitos são usados e, para chinês, são usados 3 dígitos. Ele pode ser exibido em qualquer navegador que suporta o conjunto de caracteres UTF9 sem processamento adicional.
Os outros dois são UTF16 e 32, que não serão editados aqui. Você pode verificar você mesmo, mas ainda é por causa da conveniência do armazenamento e do uso para decidir qual deles usar.
Ok, o que é relativamente familiar é GBK, comumente conhecido como Código Nacional de Padrão, formulado pelos padrões nacionais chineses e contém apenas caracteres chineses. Então, em comparação com os dois, o UTF8 é melhor compatibilidade, mas possui uma maior capacidade de armazenamento.
Volte logo, se você carregar o conjunto de personagens, ou volte e resolva o problema primeiro. Portanto, não há problema em usar GBK ou UTF8 aqui. Mas Latin1 definitivamente não é possível, aqui é definido principalmente por esse comando
O servidor, o banco de dados e as peças da tabela de dados são definidos separadamente e a codificação de conexão deve ser definida. As configurações de codificação de conexão são as seguintes:
mysql> set caracteres_set_client = 'gbk'; mysql> set caracteres_set_connection = 'gbk'mysql> set caracteres_set_results =' gbk '
Configure a codificação e você pode inserir com sucesso os chineses abaixo. De fato, pode ser resolvido em uma frase.
Comandos comumente usados
Exibir formato de codificação de banco de dados
mostrar variáveis como 'caractere_set_%';
Veja a criação de tabelas no banco de dados
Mostrar nome da tabela de tabela de tabela;
Definir formato de codificação de banco de dados
SetNames 'GBK';
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.