2011-10-11 103 views
7

我的问题是这样的:如何使UTF-8格式Stream.Write()输出

我生成并上传使用ASP.NET SQL文件,但之后该文件被保存到FTP服务器,像ü这样的字符被更改为&uul;,直到ø等等......我怎样才能防止这种情况发生?我不想用ASCII码格式化文件,但用UTF-8格式。

产生和上传文件的代码如下所示:

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

正如你可以看到我已经尝试使用System.Text.UTF8Encoding,但它不工作。

+0

奥普斯,第二个ø应该是ø没有空间。 – linnkb

+0

错误可能出现在接收端...... –

+0

导致此问题的事情的FTP端更有可能比写入流时更容易。但是你没有显示该代码。 –

回答

1

把它放在调试中,看看在encoding.GetBytes()被调用后放在'buffer'中的是什么。这将验证它是否是rx方面的原因。

9

请记住,有了流,您几乎可以随时包装流。如果你想写UTF-8编码的内容与你正确的编码,包装在StreamWriter请求流:

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

既然你说你要上传到Web服务,请务必设置您的内容编码以及。既然你没有发布request对象来自哪里,我会认为这是一个正常的HttpWebRequest

使用HttpWebRequest,您将通过使用ContentType属性来告诉服务器内容的编码是什么。

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

正如其他人所提到的,虽然FTP传输本身可能会打破它。如果可以,请确保它以二进制模式传输,而不是ASCII模式。