如何以UTF-8格式生成Stream.Write()输出

时间:2011-10-11 07:24:17

标签: c# .net asp.net utf-8

我的问题是:

我使用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,但它不起作用。

2 个答案:

答案 0 :(得分:10)

请记住,对于流,您几乎总是可以根据需要包装流。如果要编写UTF-8编码的内容,请使用正确的编码将请求流包装在StreamWriter中:

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

由于您说您要上传到网络服务,请务必同时设置内容编码。由于您尚未发布request对象的来源,我认为这是正常的HttpWebRequest

使用HttpWebRequest,您可以使用ContentType属性告诉服务器内容编码是什么。

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

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

答案 1 :(得分:1)

将它放入调试中并查看在编码后放入'缓冲区'的内容。调用GetBytes()。这将验证它是否是导致它的rx端。