2011-10-11 15 views
7

Mi problema es el siguiente:Cómo hacer Stream.Write salida() en formato UTF-8

estoy generando y cargando un archivo SQL utilizando ASP.NET, pero después de que el archivo se guarda en el servidor FTP, los caracteres como ü se cambian a &uul;, ø to & oslash; y así sucesivamente ... ¿Cómo puedo evitar que esto suceda? No quiero que el archivo tenga el formato de código ASCII, pero con UTF-8.

El código que genera y carga el archivo tiene el siguiente aspecto:

//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(); 

Como se puede ver que he tratado de usar la System.Text.UTF8Encoding, pero no funciona.

+0

Opps, el segundo ø se supone que es & oslash; sin el espacio. – linnkb

+0

El error podría estar en el lado de recepción ... –

+0

Es mucho más probable que sea el lado de FTP de las cosas que causan este problema de lo que es con la escritura de flujo. Pero no has mostrado ese código. –

Respuesta

1

Ponlo en depuración y mira lo que se pone en 'buffer' después de la codificación. Se llama a GetBytes(). Esto verificará si es el lado rx el causante.

9

Recuerde, con las transmisiones casi siempre puede envolver las transmisiones según sea necesario. Si desea escribir UTF-8 contenido codificado en que se coloca la corriente de petición en una StreamWriter con la codificación correcta:

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

Dado que usted dice que va a subir a un servicio web que asegúrese de cambiar la codificación de contenido, así . Como no ha publicado el origen del objeto request, supongo que es un HttpWebRequest normal.

Con un HttpWebRequest le diría al servidor cuál es la codificación de contenido utilizando la propiedad ContentType.

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

Como otros han mencionado, la transferencia FTP en sí misma puede estar rompiendo también. Si puede, asegúrese de que se transfiera en modo binario, no en modo ASCII.