Quali sono le accortezze da seguire per essere certi di aver impostato UTF-8 nella mia applicazione in Spring Boot 2?

di iBaffiPro il
9 risposte
Se ho capito bene, correggetemi se sbaglio, quando si realizza una webapp bisogna assicurarsi che:
1) Il codice scritto dentro i file della webapp sia in UTF-8;
2) I testi scritti dal client dentro i vari form siano in UTF-8, se non lo sono devono essere rifiutati.

Per evitare pasticci o problematiche varie cosa bisogna verificare/fare?
Io al momento l'unico UTF-8 presente è dentro i file .html:
<meta charset="UTF-8">

9 Risposte

  • Non e' cosi' semplice.

    NON BASTA inserire la direttiva meta per far si che la pagina sia in utf-8!

    ricordati che il browser si trova su un'altra macchina e l'utente potrebbe averlo configurato in modo errato.
    inoltre utf-8 e' solo una 'codifica': la STESSA sequenza di byte e' valida in TUTTE le codifiche, solo con significati diversi.

    dalla tua parte l'unica cosa che puoi fare e' assicurarti che TUTTE le pagine html che generi da codice o statiche, e TUTTE le parti che compongono la pagina, siano CODIFICATE in utf-8 e che la pagina stessa sia dichiarata scritta in utf-8

    https://www.w3.org/International/questions/qa-html-encoding-declarations.

    il modo piu' semplice per controllare se e' stato fatto tutto nel modo giusto e' usare i caratteri accentati e vedere se il browser li rappresenta correttamente.

    Questo vuol dire che le costanti nel codice, il contenuto del db, eventuali file esterni, TUTTO deve essere (convertito) in utf-8 prima di inserirlo nella pagina html. Inoltre devi usare degli editor che ti assicurino che il file che stai editando sia salvato con la stessa codifica.

    Insomma, ci sono n-mila aspetti da tenere sotto controllo.
  • Grazie mille, come al solito, su questo forum siete preparatissimi e disponibilissimi.

    Non sapevo che convenisse mettere il tag meta subito dopo head, grazie anche per questo dettaglio.
    Il test con le lettere accentate è la prima cosa che ho fatto.
    Sei sicuro che nei file .sql non sia consigliabile mettere UTF-8?
    Nel pom.xml la specifica è presente:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    Nelle classi presumo che non si debba mettere nulla anche perché non ho mai visto nulla.
    Inoltre Spring Boot 2 sembra che imposti tutto in UTF-8 come impostazione di default.
    https://docs.spring.io/spring-boot/docs/2.5.1/reference/html/application-properties.html#application-properties
    Ho capito il tuo discorso ma se decidessi ugualmente di aggiungere qualcosa per premura/precauzione nei file .sql, .css e .js farei un errore? Cosa dovrei scrivere?
  • iBaffiPro ha scritto:


    Sei sicuro che nei file .sql non sia consigliabile mettere UTF-8?
    Nei file .sql dipende da CHI legge poi questi file per applicarli su DB.

    iBaffiPro ha scritto:


    Nel pom.xml la specifica è presente:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    Il UTF-8 all'inizio riguarda SOLO il pom.xml in sé e basta.

    iBaffiPro ha scritto:


    Nelle classi presumo che non si debba mettere nulla anche perché non ho mai visto nulla.
    Spring Boot nel spring-boot-starter-parent definisce già

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    Questo è l'encoding usato da Maven E anche da un IDE che importa/apre il progetto. Quindi tutti i file creati dentro l'IDE (.java, .css, .js, .html ecc.. ecc..) di norma vengono editati e scritti fisicamente con questo encoding. Se hai creato/editato un file "fuori" dal IDE, allora dipende, bisogna vedere. Uno strumento esterno di per sé non "sa" nulla del progetto, né del <project.build.sourceEncoding>.
  • Su altri programmi c'è UTF-8 e UTF-8 con il BOM. Questo BOM deve esserci oppure no?
  • iBaffiPro ha scritto:


    Su altri programmi c'è UTF-8 e UTF-8 con il BOM. Questo BOM deve esserci oppure no?
    Il BOM è il Byte Order Mark, alcuni byte all'inizio del file che indicano l'ordine dei byte. In UTF-8 è raro e pure poco utile. Generalmente ha più senso in UTF-16 per distinguere tra UTF-16LE e UTF-16BE o anche nel UTF-32 idem. Ma UTF-16/UTF-32 non si usano praticamente mai per dei file perché sono "spreconi" di spazio.

    In sostanza e definitiva: non scrivere mai file UTF-8 con il BOM.
  • Grazie mille, mi documento su come salvare in IntelliJ i vari file e chiudo qui la descrizione
    buona giornata
  • iBaffiPro ha scritto:


    mi documento su come salvare in IntelliJ i vari file
    Ma non c'è da fare nulla ... lo ripeto: se il progetto è Maven (e Spring Boot in questo caso) vale il <project.build.sourceEncoding> .
    Punto.
  • Si ma non ricordo cosa ho fatto in passato, a volte posso aver editato/creato/aggiunto dei file usando Notepad++ o il notepad di Windows 10.
  • C'è una funzionalità di IntelliJ che permette di dire al programma di salvare sempre, continuamente ed automaticamente tutti i file in UTF-8.
    Comunque è come dici tu, tutti i miei file sono già salvati in UTF-8.
    Per contro c'è anche un bug riconosciuto ed in fase di soluzione sull'ultimissima versione dell'IDE che impedisce ad esempio di modificare il charset di un gruppo di file in un colpo solo.
    Anche questo dubbio è stato risolto.
    Grazie infinite per il supporto
Devi accedere o registrarti per scrivere nel forum
9 risposte