Domanda

Se tutto ciò che vedi sono brutte scatole senza caratteri, quali strumenti o strategie usi per capire cosa è andato storto?

(Lo scenario specifico che sto affrontando è quello di caselle senza caratteri all'interno di un <select> quando dovrebbe mostrare caratteri giapponesi.)

È stato utile?

Soluzione

In primo luogo, le "brutte caselle senza carattere" potrebbero non essere un problema di codifica, potrebbero semplicemente essere un segno che non hai installato un carattere in grado di visualizzare i glifi nella pagina.

La maggior parte dei problemi di codifica dei caratteri si verificano quando le stringhe vengono passate da un sistema all'altro.Per le webapp, questo avviene solitamente tra il browser e l'applicazione, tra l'applicazione e il filesystem e tra l'applicazione e il database.

Quindi è necessario verificare da dove provengono i dati codificati erroneamente, quale codifica di caratteri ha all'origine e con quale codifica viene ricevuta.Il modo migliore è inviare personaggi con cui sai che il sistema ha problemi ed esaminarli a ogni livello dell'app.Come appaiono all'interno dell'app?Nella banca dati?Quando li recupererai dal database?Quando vengono visualizzati nel browser?

Mi dispiace essere così generale, ma la domanda non fornisce molto altro su cui lavorare.

Altri suggerimenti

Se i dati che invii al browser vengono alterati (moji-bake) otterrai caratteri spazzatura.Inoltre, se specifichi il set di caratteri sbagliato nelle intestazioni META, il tuo browser visualizzerà la pagina in modo errato, causando nuovamente il moji-bake, a volte in punti casuali della pagina.

Quando gestisci i set di caratteri CJK, devi essere sicuro di utilizzare la codifica dei caratteri UTF8 per tutta la durata del tuo programma (archiviazione dei dati, recupero, manipolazione dei dati nel codice, visualizzazione nel browser ecc...)

Cos'è UTF8?UTF8 gestisce flussi binari di dati, non stringhe.Ciò significa che le combinazioni di bit possono avere lunghezza variabile.I caratteri ASCII hanno una lunghezza fissa di 8 bit che rappresentano 1 byte, tuttavia i caratteri UTF8 possono essere composti da 6 bit, 8 bit, 12 bit, ecc...Pertanto, UTF8 è incline a ciò che i giapponesi chiamano "mojibake".

Come programmatore, dal database alla codebase al browser, dovresti provare a utilizzare UTF8 completamente.Per la posta elettronica puoi utilizzare UTF8, ma probabilmente scoprirai che la maggior parte dei server e dei client di posta sono ancora vecchi e utilizzano un miscuglio di set di caratteri diversi (ad es.ISO9022X).

Impostazioni del databaseSe sei un utente mysql, assicurati di dover garantire che tutte le connessioni al DB utilizzino UTF8 e che tutte le tabelle/campi utilizzino UTF8.Per impostazione predefinita, mysql utilizza set di caratteri latini (svedesi).Quei stravaganti svedesi adorano il loro senso dell'umorismo!!

Controllo della base di codiceNella mia esperienza con editor come Notepad++, Notepad2, UltraEdit, e, ecc...tutti hanno problemi di supporto UTF8.Per lo più funzionano, ma poiché i loro sviluppatori non utilizzano i linguaggi CJK, non sono perfezionati.Problemi come la disattivazione del BOM (Byte Order Mark), schede danneggiate, scarsa conversione del set di caratteri, ecc...tutti i problemi attuali.

Consiglio vivamente di utilizzare un editor UTF8 collaudato come Maruo.Questo è prodotto da un'azienda giapponese, ma esiste una versione inglese (e una versione di prova) su http://www.hidemaru.interlink.or.jp/software/

Infine, potrebbe essere necessario convertire i file sorgente in UTF8.Soprattutto se la codebase stessa contiene stringhe in linguaggio CJK.

Manipolazione delle stringheQualsiasi funzione stringa deve essere multibyte sicura.Notate che non ho detto double byte.UTF8 non è un doppio byte ma multibyte, a seconda del numero totale di bit utilizzati per rappresentare un carattere.In PHP è necessario chiamare specificamente le funzioni della stringa MB.Ruby e altri linguaggi hanno un supporto più trasparente, ma devi controllare la documentazione per il tuo tipo di server delle applicazioni!

Meta tagsControlla google.co.jp o yahoo.co.jp per le loro intestazioni META.Questi sono siti che sanno come farlo correttamente.Fondamentalmente includi il seguente META tag il documento <HEAD>

<meta http-equiv="content-type" content="text/html;set di caratteri=utf-8">

Di solito è sicuro mescolare anche gli attributi del tipo di documento HTML inglese con il carattere sopra.Quindi l'aggiunta del tag META sopra sembra funzionare in un documento HTML che ha:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">

E-mailQuesta è una lattina di vermi completamente diversa.UTF8 funziona molto, ma molti vecchi client giapponesi utilizzano di più ISO2022X.Non vale la pena trattarlo qui.

Debug dei problemi UTF8Una volta che disponi di un editor UTF8 affidabile come Maruo, puoi creare pagine statiche e risolvere i tuoi problemi.

Spero possa aiutare

Reindirizzare i dati su disco e utilizzare a Editor esadecimale.La maggior parte degli editor/visualizzatori di testo esegue le proprie conversioni dietro le quinte, quindi è difficile essere sicuri di visualizzare i dati nella loro forma reale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top