Ниже представлены 4 различных решения проблемы искаженных символов, которые в основном охватывают различные ситуации, в которых искаженные символы появляются в веб-разработке.
Решение проблемы искаженного кода в основном предлагается для среды разработки java+mysql. При условии внесения соответствующих изменений его можно использовать для решения проблемы искаженного кода в различных языковых средах.
1. На странице JSP отображаются искаженные символы.
Следующая страница отображения (display.jsp) выглядит искаженной:
программный код
<html>
<голова>
<title>Китайская обработка JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<тело>
<%
out.print("Обработка китайского языка JSP");
%>
</тело>
</html>
Для разных WEB-серверов и разных версий JDK результаты обработки различны. Причина: метод кодирования, используемый сервером, отличается, и браузер отображает разные результаты для разных символов. Решение. Укажите метод кодирования (gb2312) на странице JSP, то есть добавьте: <%@ page contentType="text/html; charset=gb2312"%> в первую строку страницы, чтобы исключить искаженные символы. Полная страница выглядит следующим образом:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<голова>
<title>Китайская обработка JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<тело>
<%
out.print("Обработка китайского языка JSP");
%>
</тело>
</html>
2. При отправке формы на китайском языке появляются искаженные символы. Ниже представлена страница отправки (submit.jsp) со следующим кодом:
Код программы
.
<html>
<голова>
<title>Китайская обработка JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<тело>
<form name="form1" Method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</форма>
</тело>
</html>
Ниже приведен код страницы обработки (process.jsp):
Программный код.
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<голова>
<title>Китайская обработка JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<тело>
<%=request.getParameter("имя")%>
</тело>
</html>
Если английские символы, отправленные в submit.jsp, могут отображаться правильно, если отправлены китайские иероглифы, символы будут отображаться искаженно. Причина. Браузер по умолчанию использует кодировку UTF-8 для отправки запросов, а методы кодировки UTF-8 и GB2312 представляют символы по-разному, поэтому символы не могут быть распознаны. Решение: равномерно закодируйте запрос с помощью request.seCharacterEncoding("gb2312"), чтобы добиться нормального отображения китайского языка. Модифицированный код процесса.jsp выглядит следующим образом:
Код программы
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<голова>
<title>Китайская обработка JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<тело>
<%=request.getParameter("имя")%>
</тело>
</html>
3. Соединение с базой данных нарушено.
Поскольку все, что связано с китайским языком, искажено, решение состоит в том, чтобы добавить useUnicode=true&characterEncoding=GBK к URL-адресу базы данных, и все будет в порядке.
4. Отображение базы данных искажено.
В mysql4.1.0 в типах varchar и text появятся искаженные китайские символы. Для типа varchar установка его в качестве двоичного атрибута может решить проблему китайского языка. Для текстового типа необходимо использовать класс преобразования кодировки. Реализация следующая:
Программный код
.
общественный класс Convert {
/** Преобразование кода ISO-8859-1 в GB2312
*/
общественная статическая строка ISOtoGB (String iso) {
Строка ГБ;
пытаться{
if(iso.equals("") || iso == null){
возвращаться "";
}
еще{
iso = iso.trim();
gb = новая строка(iso.getBytes("ISO-8859-1"),"GB2312");
вернуть ГБ;
}
}
поймать (Исключение е) {
System.err.print("Ошибка преобразования кодировки:"+e.getMessage());
возвращаться "";
}
}
}
Скомпилируйте его в класс, и вы сможете вызвать статический метод ISOtoGB() класса Convert для преобразования кодировки.