如何使Stream.Write()输出为UTF-8格式

本文关键字:输出 UTF-8 格式 何使 Stream Write | 更新日期: 2023-09-27 18:10:59

我的问题是:

我正在使用ASP生成和上传SQL文件。. NET,但在文件保存到FTP服务器后,像ü这样的字符被更改为& ul;等等......我怎样才能避免这种情况的发生?我不想用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,但它不起作用。

如何使Stream.Write()输出为UTF-8格式

请记住,对于流,您几乎总是可以根据需要包装流。如果你想写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模式。

把它放在调试中,看看在encoding.GetBytes()被调用后,在'buffer'中放入了什么。这将验证它是否是rx侧引起的。