我正在處理需要能夠以任何語言導出的數據導出任務。所有使用嚴格ASCII字符的語言都可以正常工作,但是當我用東方語言進行數據導出時,它會拋出以下異常:「在郵件標題中找到無效字符」經過一番研究,我確定了這一點是由於RFC 2183規範,其中規定「參數值超過78個字符,或包含非ASCII字符,必須按[RFC 2184]」.Net MVC 2,return文件名中包含非ASCII字符的文件
中指定的編碼進行編碼我讀了這兩個文件,他們沒有沒什麼幫助。我知道有必要以UTF-8編碼發送數據以查找文件。但是,這會使下載的文件名稱顯示爲編碼的UTF-8。截至目前,我正在使用我將在下面發佈的函數將文件名編碼爲UTF文件。 (所有這一切都是在C#中,MVC2)
private static string GetCleanedFileName(string s)
{
char[] chars = s.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
string encodedString = EncodeChar(chars[i]);
sb.Append(encodedString);
}
return sb.ToString();
}
private static string EncodeChar(char chr)
{
UTF8Encoding encoding = new UTF8Encoding();
StringBuilder sb = new StringBuilder();
byte[] bytes = encoding.GetBytes(chr.ToString());
for (int index = 0; index < bytes.Length; index++)
{
sb.AppendFormat("%{0}", Convert.ToString(bytes[index], 16));
}
return sb.ToString();
}
和文件在以下函數返回:
[ActionName("FileLoad")]
public ActionResult FileLoad()
{
string fileName = Request["fileName"];
//Code that contains the path and file type Removed as it doesn't really apply to the question
FileStream fs = new FileStream(filePath, FileMode.Open);
return File(fs, exportName, GetCleanedFileName(fileName));
}
嚴格地說,這個工程。但是,整個文件名在到達用戶時以UTF編碼結束。我正在尋找一種方法將預先存在的文件傳回給用戶,以便它可以保留其非ASCII字符。
任何幫助表示讚賞。