2011-10-11 11 views
7

Il mio problema è questo:Come fare Stream.Write) output in formato UTF-8 (

sto Generazione e caricamento di un file SQL utilizzando ASP.NET, ma dopo che il file viene salvato sul server FTP, caratteri come ü sono cambiati in &uul;, ø in & oslash; e così via ... Come posso evitare che ciò accada? Non voglio che il file sia formattato con codice ASCII, ma con UTF-8.

Il codice che genera e carica il file è simile al seguente:

//request = the object to be made an request out of. 
Stream requestStream = request.GetReguestStream(); 
var encoding = new UTF8Encoding(); 
//fileContent is the string to be saved in the file 
byte[] buffer = encoding.GetBytes(fileContent); 
requestStream.Write(buffer, 0, buffer.Length); 
requestStream.Close(); 

Come potete vedere ho provato ad utilizzare il System.Text.UTF8Encoding, ma non funziona.

+0

Opps, il secondo ø ci dovrebbe essere & oslash; senza lo spazio. – linnkb

+0

L'errore potrebbe essere sul lato ricevente ... –

+0

È molto più probabile che sia il lato FTP delle cose che causano questo problema piuttosto che con la scrittura del flusso. Ma non hai mostrato quel codice. –

risposta

1

Mettilo in debug e guarda cosa viene messo in 'buffer' dopo la codifica. Viene chiamato GetBytes(). Questo verificherà se è il lato rx a causarlo.

9

Ricorda che con gli stream puoi quasi sempre avvolgere i flussi in base alle esigenze. Se si desidera scrivere UTF-8 contenuti codificati si avvolge il flusso di richieste in un StreamWriter con la codifica corretta:

using (Stream requestStream = request.GetRequestStream()) 
using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8)) { 
    writer.Write(fileContent); 
} 

Dal momento che dici che stai caricando a un servizio Web assicurarsi di impostare la codifica dei contenuti, nonché . Dal momento che non hai pubblicato da dove proviene l'oggetto request, suppongo che sia un normale HttpWebRequest.

Con HttpWebRequest direte al server qual è la codifica del contenuto utilizzando la proprietà ContentType.

request.ContentType = "text/plain;charset=utf-8"; 

Come altri hanno già accennato, anche il trasferimento FTP potrebbe interromperlo. Se puoi, assicurati che sia trasferito in modalità binaria, non in modalità ASCII.