【问题标题】:How to make Stream.Write() output in UTF-8 format如何使 Stream.Write() 以 UTF-8 格式输出
【发布时间】:2011-12-05 01:51:22
【问题描述】:

我的问题是这样的:

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

【问题讨论】:

  • Opps,第二个 ø 应该是 & oslash;没有空格。
  • 错误可能在接收端...
  • 与流写入相比,导致此问题的 FTP 方面的可能性要大得多。但是您没有显示该代码。
  • 哦,我希望不是它,而是它可能是 ftp 端造成了麻烦。谢谢:)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    将其置于调试中并查看编码后放入“缓冲区”的内容。GetBytes() 被调用。这将验证是否是 rx 端造成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2013-10-06
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      相关资源
      最近更新 更多