读书人

javascript中的中文转换有关问题

发布时间: 2012-01-11 22:28:46 作者: rapoo

javascript中的中文转换问题
我用JSP做的一个三级联动在从数据库查出来的内容需要用.getBytes( "iso-8859-1 "), "gb2312 "转换中文问题,我的程序中的IsoConvertGc就是实现这个功能的,但是我发现这个方法在普通程序中用可以,在javascript中就不起作用,如在这段话中就正确
<option value= " <%=IsoConvertGc(rs2.getString( "fenlei "))%> "> <%=IsoConvertGc(rs2.getString( "fenlei "))%> </option> 在javascript中就不可以,哪位高手给我指点指点没,代码如下:
<%!

public String IsoConvertGc(String insert)

{

String outstr;

try

{

if (insert == null || insert.trim().length() == 0)

{

return insert;

}

outstr = new String(insert.getBytes( "iso-8859-1 "), "gb2312 ");

}

catch (Exception e)

{

outstr = null;

}

return outstr;

}

%>
<body onload= "initialSelect(); ">
<% Connection con;
Statement stmt;Statement stmt1;Statement stmt2;
String hostName = "61.32.251.131 ";

String portNumber = "1521 ";

String databaseSID = "ora9i ";

//数据库登录用户和密码
String user= "fhsr ";
String password= "iltutilu ";
Class.forName( "oracle.jdbc.driver.OracleDriver ");
String url= "jdbc:oracle:thin:@ "+hostName+ ": "+portNumber+ ": "+databaseSID;

stmt=con.createStatement(); stmt1=con.createStatement();stmt2=con.createStatement();
ResultSet rs = stmt.executeQuery( "select distinct * from division ");
ResultSet rs1 = stmt1.executeQuery( "select distinct * from speciality ");
//String sql = "select * from wupinbiao where leixing= ' "+leixing+ " ' and tiaoma= ' "+tiaoma+ " ' and xinghao= ' "+xinghao+ " ' ";
%>
<script language= "javascript ">
var DeparmentCount; //三级联动菜单代码
DeparmentCount = 0;
var DivisionCount;
DivisionCount = 0;
var SpecialityCount;
SpecialityCount = 0
Department = new Array();
Division = new Array();
Speciality = new Array();
<%

int i=0;
for(rs.next();!rs.isAfterLast();rs.next(),i++){%>
Division[ <%=i%> ] = new Array( " <%=IsoConvertGc(rs.getString( "Division_name "))%> ", " <%=IsoConvertGc(rs.getString( "department_id "))%> ");


<% }%>
DivisionCount = <%=i%> ;

<%
System.out.println( "debug....1 ");

i=0;
for(rs1.next();!rs1.isAfterLast();rs1.next(),i++){%>
Speciality[ <%=i%> ] = new Array( " <%=IsoConvertGc(rs1.getString( "Speciality_name "))%> ", " <%=IsoConvertGc(rs1.getString( "division_id "))%> ");
<% }%>
SpecialityCount = <%=i%> ;

function changeDepartment(DepartmentId){
document.form1.Switch.value= "false ";
document.form1.division.length = 0;
var DepartmentId = DepartmentId;
var i;
for (i=0;i < DivisionCount; i++){
if (Division[i][1] == DepartmentId){
document.form1.division.options[document.form1.division.length] = new Option(Division[i][0], Division[i][0]);
}
}
changeDivision(document.form1.division.value);
}

function changeDivision(DivisionId){
document.form1.Switch.value= "false ";
document.form1.speciality.length = 0;
var DivisionId = DivisionId;
var i;
for (i=0;i < SpecialityCount; i++){
if (Speciality[i][1] == DivisionId){
document.form1.speciality.options[document.form1.speciality.length] = new Option(Speciality[i][0], Speciality[i][0]);
}
}
if(document.form1.speciality.length!=0){
document.form1.speciality.style.visibility = 'visible ';
}
else{
document.form1.speciality.style.visibility = 'hidden ';
}
}

function initialSelect(){
changeDepartment(document.form1.department.options[document.form1.department.selectedIndex].value);
}


</script>


[解决办法]
普通程序中用可以,在javascript中就不起作用

JAVASCRIPT中的任何语句都不可能调用JAVA程序语句.因为后者是在前者在服务端执行完毕,传到客户端后才执行的.
[解决办法]
lz将jsp文件用utf-8格式保存并采用utf-8定义编码试试:
<%@ page language= "java " import= "java.util.* " pageEncoding= "utf-8 "%>
[解决办法]
JS中是不能运行JAVA语句的,当然转码失败。
如果LZ不想将JSP定为UTF-8编码,一定要用自己的这种方式的话,
建议使用AJAX,在后台转好了再返回给JS。
------解决方案--------------------


lz的问题不是js而是页面编码的问题.
<%@ page language= "java " import= "java.util.* " pageEncoding= "utf-8 "%>
通过它将页面编码转化.
[解决办法]
在js中用 encodeURI(url);
encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)

必选的 URIString 参数代表一个已编码的 URI。

说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码: ": "、 "/ "、 "; " 和 "? "。请使用 encodeURIComponent 方法对这些字符进行编码。


[解决办法]
peciality[ <%=i%> ] = new Array( " <%=rs1.getString( "Speciality_name ").getBytes( "ISO-8859-1 "), "GBK "%> ", " <%=rs1.getString( "division_id ").getBytes( "ISO-8859-1 "), "GBK "%> ");
这句话哪错了呢?
这样报错的
symbol : method print (byte[],java.lang.String)
location: class javax.servlet.jsp.JspWriter
out.print(rs.getString( "Division_name ").getBytes( "ISO-8859-1 "), "GBK ");

--------------------------------------

没有这样的方法:print(bytes[],string)
试试这样:

peciality[ <%=i%> ] = new Array( " <%=new String(rs1.getString( "Speciality_name ").getBytes( "ISO-8859-1 "), "GBK ")%> ", " <%=new String(rs1.getString( "division_id ").getBytes( "ISO-8859-1 "), "GBK ")%> ");


[解决办法]
不是,〈%%〉中可以是任何合法的java语句,
如果还是乱码,在该页面的最前面加一行:
<%@ page contentType= "text/html;charset=GBK "%>

[解决办法]
标准的写法是:str2=new String(str1.getBytes( "iso8859-1 "), "gb2312 ");
[解决办法]
你要看看数据库中使用的是什么编码,确信是iso 8859-1吗?
[解决办法]
代码够乱的,看起来都晕,把js放到单独文件中 <%@ page contentType= "text/javascript;charset=gb2312 " language= "java " %>

主文件
<%@ page language= "java " contentType= "text/html;charset=gb2312 " pageEncoding= "gb2312 %>

字符串不用转换直接输出来看看
数据库的操作最好放到Dao文件中封装

读书人网 >Java Web开发

热点推荐