سؤال

أنا حاليا باستخدام 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")));

نصائح أخرى

حصلت عليه العمل ، وأخيرا...:)

استخدام 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 التنمية الخادم أو لا)

scroll top