ASP .الصافي تحميل الملف مع اليابانية اسم الملف
-
07-07-2019 - |
سؤال
أنا حاليا باستخدام Visual Studio 2008 لبلدي ASP .صافي التطبيق.أنا أحاول أن ملقم ملف إكسل عن طريق استجابة الكائن.المشكلة هي أنني لا يمكن أن يبدو أن تعيين عنوان الملف إلى اليابانية.إذا أنا وضعت اليابانية اسم الملف ، عادت كما القمامة حرف.أنا باستخدام اليابانية متصفح IE في اليابانية ويندوز إكس بي.
Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", "日本語.xls"));
أو
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", Server.HtmlEncode("日本語.xls")));
أنا بالفعل حاولت تغيير الترميز إلى التحول-JIS
Response.Charset = "Shift_JIS";
أو
Response.Charset = "sjis";
أي أفكار ؟ راجع للشغل, كان لي نفس المشكلة مع Visual Studio 2005 أيضا.
المحلول
وأنا لست خبيرا ASP ولكن هل حاولت إعادة ترميز اسم الملف باستخدام UrlEncode؟
Response.AddHeader("Content-Disposition",
System.Web.HttpUtility.UrlEncode(String.Format("attachment; filename=\"{0}\"", "日本語.xls")));
نصائح أخرى
وResponse.Charset
يتعلق فقط جسد طلب HTTP. ووفقا ل على HTTP المواصفات أو رؤوس هي ضمنا المشفرة كما ISO-8859-1 - أحرف خارج هذا التشفير يجب أن تكون href="http://tools.ietf.org/html/rfc2047" rel="nofollow noreferrer"> MIME ترميز
وهذا أمر منطقي فقط - بعد كل شيء، وترميز الجسم التي وضعتها Response.Charset
هو في حد ذاته المحدد في رأس
حصلت عليه العمل ، وأخيرا...:)
استخدام System.Web.HttpUtility.UrlPathEncode
يحل مشكلة القمامة ولكن عند فتح الملف يظهر unicode-uncoded الأسماء في اسم الملف بدلا من الفعلية الأحرف اليابانية.(حسنا, هذه هي القضية في IE7 و IE6 ، UrlPathEncode يعمل بشكل جيد مع IE8.)
لذا بدلا من استخدام System.Web.HttpUtility.UrlPathEncode
يجب فك filname باستخدام الترميز المستخدمة في رأس استجابة.
في .صافي افتراضيا ترميز رأس استجابة هو utf-8 و تغييره إلى iso-8859-1.تعديل شبكة الإنترنت.التكوين عن نفسه ، كما هو مبين أدناه ،
<globalization responseHeaderEncoding="iso-8859-1" .../>
و الكود سيكون ،
//apply Response header's encoding i.e. iso-8859-1 to the filename.
Dim fileName as String = "在庫あり全商品を24時間以内に出荷.doc"
Dim enc As Encoding = Encoding.GetEncoding("shift_jis")
Dim dec As Encoding = Encoding.GetEncoding("iso-8859-1")
fileName = dec.GetString(enc.GetBytes(fileName))
//Show Download Dialog box and Writting it on Client Side.
Response.ClearHeaders()
Response.ContentType = corspBean.ContentType
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """")
Response.BinaryWrite(bytes)
Response.End()
الآن شيء واحد أكثر أهمية, فقد أضعت الكثير من الوقت بسبب ذلك ، هذا لا يعمل على ASP.NET التنمية الخادم أنا.هـ الملقم استخدام اختبار/تصحيح تطبيقات الويب على جهازك المحلي.لذا نشر الحل على IIS و اختبار من هناك.أنه يعمل بشكل جيد تماما على IIS.(IIS هو مصير كل ASP.NET التطبيق ;) لذلك لا يهم ما اذا كان يعمل على ASP.NET التنمية الخادم أو لا)