【问题标题】:Non-English characters are garbled in file name on file uploading to Web API 2文件上传到 Web API 2 时文件名中的非英文字符出现乱码
【发布时间】:2015-03-09 08:41:19
【问题描述】:

我正在使用 dropzone.js 将文件上传到 Web API 2 服务。读取多部分流会产生乱码的俄语字符。例如,当我上传名称为 Русское название - 俄语字符的文件时,它会给出 ????? ??? - 俄语字符。

我确信 dropzone.js 工作正常,这只是一个 Web API 问题。

这里是 GetStream 方法。

public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
        {
            // For form data, Content-Disposition header is a requirement
            ContentDispositionHeaderValue contentDisposition = headers.ContentDisposition;
            if (contentDisposition != null)
            {
                // We will post process this as form data
                _isFormData.Add(String.IsNullOrEmpty(contentDisposition.FileName));

                return new MemoryStream();
            }

            // If no Content-Disposition header was present.
            throw new InvalidOperationException(
                string.Format("Did not find required '{0}' header field in MIME multipart body part..",
                              "Content-Disposition"));
        }

【问题讨论】:

  • 这与经典 ASP 无关。 ASP.NET 和 Classic ASP 是两种不同的技术。

标签: asp.net asp.net-web-api asp.net-web-api2 multipart


【解决方案1】:

这可能是 js 端 imo 的错误编码。正如您发布的那样,而不是“Русское название - 俄语字符”,您会得到“????? ?????? - 俄语字符”,这意味着该文件是在支持英文字符但没有俄语字符的情况下读取的。尝试将编码更改为支持西里尔字符的编码。 这可能会有所帮助:http://en.wikipedia.org/wiki/Character_encoding

【讨论】:

  • 我确定问题出在服务器端。感谢您的回复。
  • 它仍然是 IMO 编码错误,但它可能在服务器端。我有一个类似的情况,从包含波兰字符的 CSV 读取和写入流。 C# 字符串使用 UTF-16 编码,您遇到的第一个编码是在 JS 中,然后在从客户端读取流时服务器上可能有第二个,如果您将流保存到文件中,则可能是第三个(我不知道您的代码,但是有应该至少是上述情况)。检查是否在所有情况下都使用正确的 cyrylic 编码,因为使用错误编码会破坏数据。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多