StreamReader problema - la codifica di file sconosciuto (ISO 88591 occidentale)
-
21-08-2019 - |
Domanda
Durante la lettura dei dati dal file di input ho notato che lo symbom ¥ non veniva letto dal StreamReader. Mozilla Firefox ha mostrato il tipo di file di input come occidentale (ISO-8859-1).
Dopo aver suonato in giro con i parametri di codifica che ho trovato ha funzionato con successo per i seguenti valori:
System.Text.Encoding.GetEncoding(1252) // (western iso 88591)
System.Text.Encoding.Default
System.Text.Encoding.UTF7
Ora sto pensando di usare l'impostazione "Default", però io non sono molto sicuro se questa è la decisione giusta. Il codice esistente non ha utilizzato alcun la codifica e sono preoccupato che potrei rompere qualcosa.
so molto poco (o meglio niente) sulla codifica. Come posso fare per questo? La mia decisione di utilizzare System.Text.Encoding.Default sicuro? Dovrei essere che chiede all'utente di salvare i file in un formato particolare?
Soluzione
Codice 1252 non è proprio la stessa cosa come ISO-Latin-1. Se si desidera ISO-Latin-1, utilizzare Encoding.GetEncoding(28591)
. Tuttavia, mi aspetto che sia lo stesso per questo punto di codice (U + 00A5). UTF-7 è completamente diverso (e quasi mai ciò che si desidera utilizzare).
Encoding.Default
è non di sicurezza - è una pessima idea in molte situazioni. E 'specifico per il particolare computer è in esecuzione su. Se si trasferisce un file da un computer ad un altro, chissà che codifica per il computer originale usava?
Se sapete che il vostro file è in ISO-8859-1, quindi utilizzare in modo esplicito che. Che cosa sta producendo questi file? Se sono solo di essere salvati dall'utente, quale programma essi vengono salvati in? Se UTF-8 è un'opzione, che è una buona -. In parte perché può far fronte con l'intera Unicode
Ho un articolo su Unicode e un altro su problemi di debug Unicode che si possono trovare utili.
Altri suggerimenti
Il codice esistente non ha utilizzato alcun encoding
Non può essere specificato in modo esplicito la codifica, nel qual caso la codifica probabilmente in default a Encoding.UTF8.
Il nome Encoding.Default potrebbe dare l'impressione che questa è la codifica predefinita utilizzata da classi come StreamReader, ma questo non è il caso: Come Jon Skeet sottolineato, Encoding.Default è la codifica per la corrente ANSI del sistema operativo pagina di codice.
Personalmente penso che questo rende il nome della proprietà Encoding.Default un po 'fuorviante.
Sei uno sviluppatore di software? non dimenticate di leggere Joel Spolsky di Il Developer Absolute minimo Ogni software assolutamente, positivamente deve sapere su Unicode e set di caratteri (No Excuses !)