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?

È stato utile?

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.

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