Xpages 在Excel中导出和查看阿拉伯字符时会出现乱码

Xpages 在Excel中导出和查看阿拉伯字符时会出现乱码,xpages,xpages-extlib,Xpages,Xpages Extlib,我正在尝试将我的xpages导出到excel。它涉及将阿拉伯语文本和数字导出到excel 问题是当我在excel中查看导出列时(客户端名称为阿拉伯语)。结果是垃圾 我的lotus数据库配置为支持英语和阿拉伯语,编码为utf-8 非常欢迎任何帮助 这是我正在使用的代码 var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon

我正在尝试将我的xpages导出到excel。它涉及将阿拉伯语文本和数字导出到excel

问题是当我在excel中查看导出列时(客户端名称为阿拉伯语)。结果是垃圾

我的lotus数据库配置为支持英语和阿拉伯语,编码为utf-8

非常欢迎任何帮助

这是我正在使用的代码

var exCon = facesContext.getExternalContext();  
var writer = facesContext.getResponseWriter();
var response = exCon.getResponse();
docIDArray=sessionScope.selectedDocs;

//lets define domino classess
var myView:NotesView = database.getView(sessionScope.vname);
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Content-disposition", "attachment; filename=CustomerCare.xls");
writer.write("<table>");
writer.write("<thead><tr>");
writer.write("<td><b>Created</b></td>");    
writer.write("<td><b>Client Name</b></td>");
writer.write("<td><b>Daybreak ID</b></td>");
writer.write("<td><b>Request type</b></td>");
writer.write("<td><b>Status</b></td>");
writer.write("<td><b>Mobile #</b></td>");
writer.write("<td><b>Escalation</b></td>");
writer.write("<td><b>Request via</b></td>");
writer.write("<td><b>From</b></td>");
writer.write("<td><b>Updated by</b></td>");
writer.write("</tr></thead>");  
/**
debuggin purpose only
print(sessionScope.vname+'-viewname');
print(sessionScope.selectedDocs+' -selectedDocs');
print(sessionScope.vfilter+'-vfilter' );
print(sessionScope.catFilter+'-catFilter');
**/
//determine if user wants to export all or the individual documents 
//export all document in current display/view
if (docIDArray.length==0){
    //since some view are special evaluate them here
    switch(sessionScope.vname)
    {
        case "Status":
            var dc:NotesDocumentCollection=myView.getAllDocumentsByKey(sessionScope.vfilter);
            var doc:NotesDocument=dc.getFirstDocument();
            while (doc!= null){
                writer.write("<tr>");           
                writer.write("<td>" + doc.getItemValueDateTimeArray("dxdateFiled").elementAt(0)+ "</td>");                  
                writer.write("<td>" + doc.getItemValueString("cxClientName")+ "</td>");                 
                writer.write("<td>" + doc.getItemValueString("cxDBID") + "</td>");          
                writer.write("<td>" + @Implode(doc.getItemValueString("cxStatus_1"),",") + "</td>");                                        
                //writer.write("<td>" + doc.getItemValueString("cxStatus_1") + "</td>");
                writer.write("<td>" + doc.getItemValueString("cxStatus1") + "</td>");                           
                writer.write("<td>" + doc.getItemValueString("cxMobile") + "</td>");
                if(doc.getItemValue("escalationlevel").toString()=='[3.0]'){
                    writer.write("<td>" + '3' + "</td>");
                }else{
                    writer.write("<td>" + '-' + "</td>");
                }                           
                writer.write("<td>" + doc.getItemValueString("cxRecRequestvia") + "</td>");
                writer.write("<td>" + doc.getItemValueString("From")+ "</td>");
                writer.write("<td>" + doc.getItemValueString("Closedby") + "</td>");                    
                writer.write("</tr>");
                doc=dc.getNextDocument(doc);
            }
            break;
        case "Categories":          
        case "callStatus":      
            var sString:String = sessionScope.catFilter;        
            var viewNav:NotesViewNavigator = myView.createViewNavFromCategory(sString);
            var viewEnt:NotesViewEntry = viewNav.getFirst(); 
            while (viewEnt!=null){  
                writer.write("<tr>");
                writer.write("<td>" + viewEnt.getColumnValues()[2] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[3] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[5] + "</td>");                  
                writer.write("<td>" + viewEnt.getColumnValues()[7].toString() + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[8] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[9] + "</td>");
                if( viewEnt.getColumnValues()[6].toString()=='3'){
                    writer.write("<td>" + '3' + "</td>");
                }else{
                    writer.write("<td>" + '-' + "</td>");
                }       
                writer.write("<td>" + viewEnt.getColumnValues()[10] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[1] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[11] + "</td>");
                writer.write("</tr>");
                viewEnt = viewNav.getNext(viewEnt);
            }
            break;               
        default:                
            var viewNav:NotesViewNavigator = myView.createViewNav();
            var viewEnt:NotesViewEntry = viewNav.getFirst();
            while (viewEnt!=null){  
                writer.write("<tr>");
                writer.write("<td>" + viewEnt.getColumnValues()[2] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[3] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[5] + "</td>");                  
                writer.write("<td>" + viewEnt.getColumnValues()[7].toString() + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[8] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[9] + "</td>");
                if( viewEnt.getColumnValues()[6].toString()=='3'){
                    writer.write("<td>" + '3' + "</td>");
                }else{
                    writer.write("<td>" + '-' + "</td>");
                }       
                writer.write("<td>" + viewEnt.getColumnValues()[10] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[1] + "</td>");
                writer.write("<td>" + viewEnt.getColumnValues()[11] + "</td>");
                writer.write("</tr>");
                viewEnt = viewNav.getNext(viewEnt);
            }
    }
}else{
    var db:NotesDatabase = session.getCurrentDatabase();
    switch(sessionScope.vname)
    {
        case "Status":
            for(i=0;i < docIDArray.length;i++){
            var docId=docIDArray[i];
            var doc:NotesDocument=db.getDocumentByID(docId);
            var output:string = "";
            if(doc != null) {           
                writer.write("<tr>");                   
                writer.write("<td>" + doc.getItemValueDateTimeArray("dxdateFiled").elementAt(0)+ "</td>");
                writer.write("<td>" + doc.getItemValueString("cxClientName")+ "</td>");
                writer.write("<td>" + doc.getItemValueString("cxDBID") + "</td>");                  
                writer.write("<td>" + doc.getItemValueString("cxStatus_1") + "</td>");                  
                writer.write("<td>" + doc.getItemValueString("cxStatus1") + "</td>");           
                writer.write("<td>" + doc.getItemValueString("cxMobile") + "</td>");
                if(doc.getItemValue("escalationlevel").toString()=='[3.0]'){
                    writer.write("<td>" + '3' + "</td>");
                }else{
                    writer.write("<td>" + '-' + "</td>");
                }                           
                writer.write("<td>" + doc.getItemValueString("cxRecRequestvia") + "</td>");         
                writer.write("<td>" + doc.getItemValueString("cxUsername") + "</td>");
                writer.write("<td>" + doc.getItemValueString("Closedby") + "</td>");
                writer.write("</tr>");
            } // end if
            }//end for
            break;
        default:
        for(i=0;i < docIDArray.length;i++){
            var docId=docIDArray[i];
            var doc:NotesDocument=db.getDocumentByID(docId);
            var output:string = "";
            if(doc != null) {
                writer.write("<tr>");                   
                writer.write("<td>" + doc.getItemValueDateTimeArray("dxdateFiled").elementAt(0)+ "</td>");
                writer.write("<td>" + doc.getItemValueString("cxClientName")+ "</td>");
                writer.write("<td>" + doc.getItemValueString("cxDBID") + "</td>");                  
                writer.write("<td>" + doc.getItemValueString("cxStatus_1") + "</td>");                  
                writer.write("<td>" + doc.getItemValueString("cxStatus1") + "</td>");           
                writer.write("<td>" + doc.getItemValueString("cxMobile") + "</td>");
                if(doc.getItemValue("escalationlevel").toString()=='[3.0]'){
                    writer.write("<td>" + '3' + "</td>");
                }else{
                    writer.write("<td>" + '-' + "</td>");
                }                           
                writer.write("<td>" + doc.getItemValueString("cxRecRequestvia") + "</td>");         
                writer.write("<td>" + doc.getItemValueString("cxUsername") + "</td>");
                writer.write("<td>" + doc.getItemValueString("Closedby") + "</td>");
                writer.write("</tr>");
            } // end if
        }//end for
    }
}
writer.write("</table>");
writer.endDocument();
facesContext.responseComplete();    
var exCon=facesContext.getExternalContext();
var writer=facesContext.getResponseWriter();
var response=exCon.getResponse();
docIDArray=会话范围。选择的DOCS;
//让我们定义domino类
var myView:NotesView=database.getView(sessionScope.vname);
response.setContentType(“application/vnd.ms excel;charset=utf-8”);
setHeader(“缓存控制”、“无缓存”);
setHeader(“内容处置”、“附件;文件名=CustomerCare.xls”);
作者:写(“”);
作者:写(“”);
作者。写(“创建”);
编写人(以下简称“客户名称”);
writer.write(“黎明ID”);
write.write(“请求类型”);
作家。写作(“身份”);
writer.write(“Mobile#”);
编写人。编写(“升级”);
写信人。写信(“请求通过”);
作者。写(“来自”);
编写人。编写人(“更新人”);
作者:写(“”);
/**
调试目的
打印(sessionScope.vname+'-viewname');
打印(sessionScope.selectedDocs+'-selectedDocs');
打印(sessionScope.vfilter+'-vfilter');
打印(sessionScope.catFilter+'-catFilter');
**/
//确定用户希望导出所有文档还是单个文档
//导出当前显示/视图中的所有文档
if(docIDArray.length==0){
//因为有些观点是特殊的,所以在这里对它们进行评估
开关(sessionScope.vname)
{
案例“状态”:
var dc:NotesDocumentCollection=myView.getAllDocumentsByKey(sessionScope.vfilter);
var doc:NotesDocument=dc.getFirstDocument();
while(doc!=null){
作者:写(“”);
writer.write(“+doc.getItemValueDateTimeArray(“dxDateField”).elementAt(0)+”);
write(“+doc.getItemValueString(“cxClientName”)+”);
write(“+doc.getItemValueString(“cxDBID”)+”);
write(“+@内爆(doc.getItemValueString(“cxStatus_1”),“,”+”);
//write(“+doc.getItemValueString(“cxStatus_1”)+”);
write(“+doc.getItemValueString(“cxStatus1”)+”);
write(“+doc.getItemValueString(“cxMobile”)+”);
如果(doc.getItemValue(“escalationlevel”).toString()=='[3.0]'){
writer.write(“+”3“+”);
}否则{
writer.write(“+”-“+”);
}                           
write(“+doc.getItemValueString(“cxreRequestVia”)+”);
write(“+doc.getItemValueString(“From”)+”);
write(“+doc.getItemValueString(“Closedby”)+”);
作者:写(“”);
doc=dc.getNextDocument(doc);
}
打破
案例“类别”:
案例“callStatus”:
var sString:String=sessionScope.catFilter;
var viewNav:NotesViewNavigator=myView.createViewNavFromCategory(sString);
var viewEnt:NotesViewEntry=viewNav.getFirst();
while(viewEnt!=null){
作者:写(“”);
writer.write(“+viewEnt.getColumnValues()[2]+”);
writer.write(“+viewEnt.getColumnValues()[3]+”);
writer.write(“+viewEnt.getColumnValues()[5]+”);
write(“+viewEnt.getColumnValues()[7].toString()+”);
writer.write(“+viewEnt.getColumnValues()[8]+”);
write(“+viewEnt.getColumnValues()[9]+”);
if(viewEnt.getColumnValues()[6].toString()='3'){
writer.write(“+”3“+”);
}否则{
writer.write(“+”-“+”);
}       
write(“+viewEnt.getColumnValues()[10]+”);
write(“+viewEnt.getColumnValues()[1]+”);
write(“+viewEnt.getColumnValues()[11]+”);
作者:写(“”);
viewEnt=viewNav.getNext(viewEnt);
}
打破
违约:
var viewNav:NotesViewNavigator=myView.createViewNav();
var viewEnt:NotesViewEntry=viewNav.getFirst();
while(viewEnt!=null){
作者:写(“”);
writer.write(“+viewEnt.getColumnValues()[2]+”);
writer.write(“+viewEnt.getColumnValues()[3]+”);
writer.write(“+viewEnt.getColumnValues()[5]+”);
write(“+viewEnt.getColumnValues()[7].toString()+”);
writer.write(“+viewEnt.getColumnValues()[8]+”);
write(“+viewEnt.getColumnValues()[9]+”);
if(viewEnt.getColumnValues()[6].toString()='3'){
writer.write(“+”3“+”);
}否则{
writer.write(“+”-“+”);
}       
write(“+viewEnt.getColumnValues()[10]+”);
write(“+viewEnt.getColumnValues()[1]+”);
write(“+viewEnt.getColumnValues()[11]+”);
作者:写(“”);
viewEnt=viewNav.getNext(viewEnt);
}
}
}否则{
var db:NotesDatabase=session.getCurrentDatabase();
开关(sessionScope.vname)
{
案例“状态”:
对于(i=0;i