WebLogic Server 国际化

gyscsdn 2004-11-17 04:41:53
编程

关于使用 Servlet 和 JSP 的说明

编码转换、标准、范围和首选项

WebLogic Server 是一种 Java 应用程序,其中的所有字符串在内部都作为 Unicode 字符串进行处理。另一方面,对于 HTML 页使用各种字符集。在 WebLogic Server 中,在处理 HTML 数据时,会通过使用 Java 编码转换器在 Unicode 和 HTML 字符集之间执行编码转换。使用 WebLogic Server 时,一定要确定如何在应用程序中管理服务器内的 Unicode 字符串与 HTML 中所用编码之间的转换。

WebLogic Server 有许多用于根据特定范围确定编码的参数,它允许您配置自己的应用程序的系统。

而且,在 WebLogic Server 中,可以不考虑 Java VM 默认编码,而为所使用的每个模块指定不同的编码。

在 WebLogic Server 中,用来设置编码的一些方法是由 J2EE 规范定义的。其他方法由 WebLogic 的专有规范定义。在这些方法中,下面是 JSP/Servlet 的设置项目列表,您无需指定其中的所有项目。请阅读下列描述并组合最适合您的环境的编码设置。

编码设置

与 JSP/Servlet 有关的编码设置包括:

从 Servlet 输出的 HTTP 响应中使用的写入器编码
JSP 文件的编码
从 JSP 输出的写入器编码
HTTP 请求(如 GET/POST)的编码(对于特定的请求 URL)
数据(如 GET/POST)的编码(对于特定的 HTTP 请求)
JSP 容器的编码
Java 编码和 IANA 字符集之间的映射
如果指定了多个参数,可以通过一组特定的规则来确定哪个参数有效。例如,如果 UTF-8 设置为 JSP 容器的默认编码,但在特定 JSP 的 page 标记中指定了 GB2312,则将使用 GB2312。一般来说,在较小范围中指定的编码具有较高的优先级。如有必要,可以在较大的范围中设置默认编码,并在较小的范围中设置特殊编码。

建议您在整个应用程序中使用同一种编码。

使用简体中文的一般步骤

如上所述,WebLogic Server 提供一组用来指定编码的参数。在使用它时,必须指定从 HTTP 请求到 HTTP 响应的所有内容。在默认情况下,将使用 ISO-8859-1 编码。

Servlet

指定 HTTP 响应的编码 - response.setContentType()
指定浏览器显示的编码 - HTML Content-Type
指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>
JSP

指定 JSP 文件的编码 - page 标记中的 pageEncoding 指令(可选)
指定页面输出的编码 - page 标记中的 contentType 指令
指定浏览器显示的编码 - HTML Content-Type
指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>
Servlet 和 JSP

Java 编码和 IANA 字符集之间的映射(在 weblogic.xml 中设置)
下列部分详细说明了 Servlet 和 JSP 的每个设置。

Servlet

指定 HTTP 响应的编码 - response.setContentType()

要为由 Servlet 生成的 HTML 页面指定编码,请使用 setContentType() 方法。对 setContentType() 的调用指定下列内容:

用于响应的 HTTP 头中的 ContentType 特性
用于输出响应的写入器编码
因此,在获得写入器之前,必须先调用 setContentType()。

res.setContentType("text/html;charset=GB2312");
PrintWriter out = res.getWriter();
该调用指定 HTTP 头中的 contentType。这意味着同时指定了浏览器显示的编码。

指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>

现在,您已经指定了 HTTP 响应(使用上述方法从 WebLogic Server 发送到客户端的数据)的编码设置。下面描述了在将数据从客户端发送到 WebLogic Server 时,如何设置 HTTP 请求的编码。

可通过三种方法指定 HTTP 请求的编码:

将字符集写入 HTTP 请求的 contentType 中
此方法最符合 HTTP 规范。但是,不能在 Microsoft Internet Explorer 或 Netscape 浏览器中指定该值。

在服务器上指定 HTTP 请求的编码
使用 request.setCharacterEncoding() 方法。可以指定每个请求的编码。还可以执行更细化的操作(如动态控制编码)。另外,setCharacterEncoding() 符合 Servlet 2.3 规范。因此,可以实现应用程序可移植性。

request.setCharacterEncoding("GB2312");
String pval = request.getParameter(pname);
使用 Web 应用程序部署描述符 (weblogic.xml) 中的 <input-charset>,指定请求 URL 的编码。
在 WebLogic Server 6.0 中,它在 web.xml 中进行设置。在 WebLogic Server 6.1 或更高版本中,它在 weblogic.xml 中进行设置。同时,元素名称等也进行了更改。因此,如果从 WebLogic Server 6.0 迁移,需要修改 weblogic.xml 和 web.xml 文件。

对于从客户端 Web 浏览器的请求 URL 中指定的资源,<input-charset> 的值确定该资源的路径在服务器端的编码。

示例:

Obtain http://localhost:7001/webappa/path1/ in UTF-8
Obtain http://localhost:7001/webappa/path2/ in GB2312
系统允许使用这些配置。

可以按如下所示描述 <input-charset>。目标 Web 应用程序的 <charset-params> 元素应当写在部署描述符 (weblogic.xml) 文件中。

在 <charset-params>(内嵌于 <weblogic-web-app>)中,写入要为其指定编码的请求 URL 路径,以及要为 HTTP 请求指定的编码(用 IANA 名称)。

有关 Java 编码名称和 IANA 字符集之间映射的信息,请参阅“Java 编码和 IANA 字符集之间的映射(在 weblogic.xml 中设置)”部分。

下面是一个处理多个编码的 Web 应用程序的示例。

在本例中,“/*”的编码设置为 UTF-8,“/rus/jo/*”的编码设置为 GB2312。

<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
<charset-params>
<input-charset>
<resource-path>/rus/joe/*</resource-path>
<java-charset-name>GB2312</java-charset-name>
</input-charset>
</charset-params>
有关此设置的详细信息,请参阅“Developing Web Applications for WebLogic Server”中的 charset-params。

...全文
70 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyscsdn 2004-11-17
  • 打赏
  • 举报
回复
国际化概述

WebLogic Server 中 I18n 的主要特性:

在 WebLogic Server 内部,所有字符都按 Unicode 进行处理。只要输入或输出字符数据,就执行代码转换。
必须分别为 WebLogic Server、J2EE 组件和 WebLogic Server 容器上的资源指定适当的编码转换。
如果不指定编码转换,系统将应用默认的编码转换。
存在各种类型的默认编码转换,其中的一些编码转换不符合操作系统的区域设置。
在使用 WebLogic Server 生成用于处理多字节字符数据的分布式系统之前,应该了解如何指定有关 Java 和 J2EE 的适当编码。而且,在控制编码转换时,应该适当考虑连接到 WebLogic Server 的系统(例如,操作系统、Internet、后端系统)的编码处理。

下面简要描述了 WebLogic Server 中的编码处理。

Unicode 的使用

WebLogic Server 是一种 100% 纯 Java 应用服务器程序,它使用 Unicode 进行服务器内部编码。

这样 WebLogic Server 就能同时处理所有语言的字符(只要 Unicode 能够处理这些字符)。

编码转换

当 WebLogic Server 与外部交换字符数据时,需要进行编码转换。

Unicode 是 Java 的内部编码,而在普通的操作系统中,几乎没有任何环境使用 Unicode,它们使用的是为每个平台单独定义的称为“本地编码”的编码。例如,Windows 系统的本地编码是一个与语言有关的代码页,Unix 系统的本地编码是与用 LANG 环境变量指定的区域设置相对应的编码,数据库的本地编码是在创建数据库时指定的字符集或者由客户端指定的字符集。

因此,在 WebLogic Server 中进行输入和输出时,需要进行本地编码与 Unicode 之间的编码转换。当 WebLogic Server 与操作系统或外部资源交换字符数据时,总会发生这种编码转换。

注意:序列化的 Java 类流中包含的字符作为(UTF-8 编码的)Unicode 保存在该类的内部信息中。这意味着无需考虑序列化流的代码转换。例如,对于 EJB 或 RMI 无需考虑编码。

因为编码转换是针对单个字符进行的,所以转换过程会占用大量 CPU 资源。在设计应用程序时,最好避免进行代码转换,以确保系统性能较高。

WebLogic Server 服务器自身的编码转换与应用程序组件和资源的编码转换是相互独立的

在 WebLogic Server 中,服务器本身的编码转换与 WebLogic Server 上应用程序组件和资源的编码转换是分开的。

在 WebLogic Server 中,服务器日志或管理控制台的编码是由服务器的 Java VM 或浏览器的语言设置的默认编码确定的,而与应用程序组件的编码或 WebLogic Server 提供的内容所用的语言无关。

而且,在配置 WebLogic Server 的行为时,可以不考虑 WebLogic Server 使用的区域设置或语言设置。

还可以为在 WebLogic Server 容器上配置的资源单独设置编码转换。

WebLogic Server 本身的编码转换包括:

WebLogic Server 的系统日志输出
管理控制台的页面编码
WebLogic Server 和本地文件系统之间的文件 I/O
单个应用程序的编码转换包括:

JSP 文件
Servlet
DD 文件
XML
Web Service
WebLogic Server 上的资源包括:

JDBC 连接
WTC 连接等
为 WebLogic Server 指定编码时,需要弄清楚要为哪些类别指定编码,然后需要查看是否可以创建有效的 Character 对象,以及 WebLogic Server 中的 Character 对象是否可以正确地转换为所需的编码。

如上所述,您应该了解编码转换行为,以便进行正确的设置。如果不指定编码转换,应用程序将无法正确处理多字节字符。

如果不指定编码,将使用适合情况的默认编码。默认编码可能因目标的规范或环境而异。

默认编码示例

影响 WebLogic Server 行为的默认编码包括:

服务器 VM 的默认编码
J2EE 的默认编码
XML 的默认编码
HTTP 协议的默认编码
浏览器的默认编码
Web Service(例如,SOAP、WSDL、UDDI)的默认编码等
示例:

在简体中文版的 Windows 中,服务器 VM 的默认编码通常是 MS936。
J2EE 的默认编码通常是 ISO-8859-1。
XML 的默认编码通常是 UTF-8。
HTTP 的默认编码通常是 US-ASCII。
因为不同的默认编码用于不同的目标(如上所述),所以,如果没有指定适当的编码,WebLogic Server 就无法正确地处理简体中文。为了能够控制编码转换,您应该先了解下列内容。

在 Java 语言术语中,编码意味着“字符集”。描述字符集的词很多,但是每个词的定义略有不同。

编码或字符集意味着一种定义,根据这种定义,将计算机可读代码分配给特定语言的字符集合,以便计算机可以处理这些字符。

Java 语言在其 I/O 部分中包括了这些差异,以便可以在其内部以 Unicode 形式处理所有字符。这意味着对于任何字符集来说,只要它的编码定义存在,Java 就可以处理它。Java 基本上可以包括各种系统之间存在的任何编码差异。但是,目前还没有一个编码转换表可以处理目前全部现有编码之间的所有细微差异。同样,现有的编码表存在一些限制,这些限制源自与 Unicode 的一致性问题。

在 Java Web 应用程序服务器中,Java 编码名称和 MIME 字符集(由 IANA 定义并在 Internet 和 XML 中使用)之间的差异尤其重要。WebLogic Server 使用一个映射表将 Java 编码名称与 IANA 字符集名称相关联,从而包括这种差异。使用该映射表,WebLogic Server 可以将 JSP 上定义为“Shift_JIS”的文件作为具有 Java 编码名称的“MS932”来处理。可以修改 WebLogic Server 的映射表,让其将“Shift_JIS”字符集作为“cp943”Java 编码来处理。

Xerces 是 WebLogic Server 的内置 XML 解析器,它具有自己的 IANA-Java 映射表。用户不能对这种映射进行自定义。

WebLogic Server 主要使用 Java 编码名称来指定编码。J2EE、Internet 或 XML 主要使用 IANA 字符集名称,您可以根据需要修改这种映射。




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

安装

WebLogic Server 提供简体中文版安装程序和英语版安装程序。两者均可从 BEA Systems, Inc. 网站下载。

简体中文版安装程序和英语版安装程序之间的区别在于:就影响 WebLogic Server 行为的程序文件而言,这两个安装程序是相同的,您可以将它们视为具有相同的软件。而且,从英语版安装程序启动的 WebLogic Server 实例和从简体中文版安装程序启动的另一个实例之间没有任何互操作性问题。

共性:

所有的 WebLogic Server 类文件(weblogic.jar 和其他文件)
版本字符串
消息目录和管理控制台联机帮助中的语言
区别:

一些经过翻译的文本文件
about_wls/readme.txt/index.jsp 或 html
WebLogic Builder 联机帮助
简体中文版的 WebLogic Server 8.1 不支持下列功能:

智能更新
网络安装程序

gyscsdn 2004-11-17
  • 打赏
  • 举报
回复
WebService

SOAP 消息及其编码的处理

接收 SOAP 消息

在 WebLogic Server Web Service 中,编码处理符合 SOAP1.1 和 SOAP1.2 规范(*注释 1)。SOAP 1.1 HTTP/SOAP 消息的媒体类型是“text/xml”,其编码处理在 RFC2376 中定义。对于 SOAP 1.2 HTTP/SOAP 消息,媒体类型是“application/soap+xml”,其编码处理在 RFC3023 中定义。这些 RFC 规范定义下列行为:

SOAP 1.1

HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。
忽略 XML 声明中的编码特性。
如果未使用 contentType 指定字符集,则此消息将作为 US-ASCII 进行处理。
SOAP 1.2

HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。
忽略 XML 声明中的编码特性。
如果未使用 contentType 指定字符集,则使用 XML 声明中的编码特性。
如果未指定 XML 声明中的 contentType 字符集参数或编码特性,则此消息将作为 UTF-8 进行处理。
与 WebLogic Server 一样,WebLogic Workshop 也根据此规范进行操作。因此,对于使用 HTTP/SOAP 来调用 WebLogic Workshop 开发的 Web Service 的客户端,请确保指定了正确的 contentType 字符集。

发送 SOAP 消息

WebLogic Server 生成的所有 HTTP/SOAP 消息都以 UTF-8 编码。在生成过程中,会将“encoding=UTF-8”添加到 SOAP 消息的 HTTP 头中。

注意:以英语区域(locale)设置(例如在 UNIX 中指定 LANG=C)启动 WebLogic Server 时,在 SOAP 消息中只能使用 us-ascii 字符,不支持其他字符。如果要在 Web Service 中使用简体中文字符,请使用简体中文区域(locale)设置启动 WebLogic Server。

如果要在以英语区域设置启动的 WebLogic Server 上使用 us-ascii 之外的其他字符,请在 WebLogic Server 启动脚本文件中设置下列启动选项。这甚至可以使 WebLogic Server 在英语区域设置环境中以 UTF-8 生成消息。

注意:对于 SOAP 消息,强烈建议使用 UTF-8。

-Iweblogic.webservice.i18n.charset=utf-8
Web Service 主页

Web Service 主页是以服务器 VM 默认编码生成的。

UDDI 浏览器

UDDI 浏览器只支持 us-ascii 字符。它不能正确处理多字节字符。

XML --- StreamParser 中的多字节字符处理

要将编码信息添加到使用 XML 流 API 生成的 XML 头中,请按如下方式使用 ElementFactory 类的 createStartDocument():

XMLOutputStreamFactory factory = XMLOutputStreamFactory.newInstance();
XMLOutputStream output = factory.newOutputStream(new
OutputStreamWriter(new FileOutputStream(fname),"GB2312"));
output.add(ElementFactory.createStartDocument("GB2312","1.0"));
output.flush();
下面是关于使用 XML 流 API 解析包含简体中文字符的 XML 文档的说明。

当通过流为解析器提供输入时,请使用字节流。这可以启用解析器的 XML 编码自动检测。解析器可以生成字符流,该字符流使用由 XML 声明中的编码特性指定的编码,从而确保能够进行正确的解析。

当通过 Unicode 字符流提供输入时,解析器将忽略 XML 头中的编码设置。在这种情况下,用户负责提供适当的字符流。

JDBC

设置 WebLogic jDriver for Oracle 的使用环境

要使用 weblogic.jdbc.oci.Driver,请按如下所示设置环境。请注意,需要设置 jDriver 许可证。

将下列更改添加到 startWebLogic.cmd 文件。
指定 Oracle 的 bin 目录的路径和 WebLogic Oracle Oci 驱动程序本地库的 bin 目录的路径。请根据 Oracle 版本使用相应的 Oci 驱动程序。

对于 Oracle 8.1.7:%WL_HOME%\bin\oci817_8;d:\oracle\ora81\bin

对于 Oracle 9.0.1:%WL_HOME%\bin\oci901_8;d:\oracle\ora90\bin

指定 Oracle 环境变量 NLS_LANG。
NLS_LANG 的编码与 weblogic.codeset(jDriver for Oracle 的连接属性)的编码必须始终相同。

NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
有关 NLS_LANG 与 weblogic.codeset 之间的关系的信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Advanced Oracle Features。如果可以指定下列编码:为 Oracle 数据库指定 ZHS16GBK、为 NLS_LANG 指定 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 以及为 weblogic.codeset 指定 MS936,则 Windows 平台上使用的字符集可以存储在 Oracle 数据库中。

现在,无需使用 WebLogic Server 的连接池,即可使用 WebLogic Server jDriver for Oracle。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 WebLogic Server jDriver for Oracle 时的编程信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Connecting to an Oracle DBMS。

如果使用连接池,需要在管理控制台中进行下列设置。有关如何设置连接池的详细信息,请参阅“Installing and Using WebLogic jDriver for Oracle”中“Installing WebLogic jDriver for Oracle”一章的 Setting Up a Connection Pools 部分。下面是设置样例。

管理控制台
设置连接属性。

URL:
jdbc:weblogic:oracle
Driver Class Name:
weblogic.jdbc.oci.Driver
Properties:
user=scott
password=tiger
server=ora81
weblogic.codeset=MS936
选择要在目标中使用的服务器或群集。

重新启动 WebLogic Server。
现在即可使用 WebLogic Server jDriver for Oracle。

设置 Oracle Oci 驱动程序的使用环境

将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:

d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip
将下列目录添加到 PATH 环境变量:

c:\oracle\ora81\bin
现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle Oci 驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle Oci 驱动程序时的编程信息,请参阅 Oracle 文档。

如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。

在管理控制台中设置下列内容:
设置连接属性。

URL:
jdbc:oracle:oci8:@ora81
Driver Class Name:
oracle.jdbc.driver.OracleDriver
Properties:
user=scott
password=tiger
选择要在目标中使用的服务器或群集。

重新启动 WebLogic Server。
现在即可使用 Oracle Oci 驱动程序。

设置 Oracle 瘦驱动程序的使用环境

对于瘦驱动程序,不需要指定 NLS_LANG 环境变量。

将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:

d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip
将下列目录添加到 PATH 环境变量:

c:\oracle\ora81\bin
现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle 瘦驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle 瘦驱动程序时的编程信息,请参阅 Oracle 文档。

如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。

在管理控制台中设置下列内容:
设置连接属性。

URL:
jdbc:oracle:thin:@jpsol1:1521:ora81
Driver Class Name:
oracle.jdbc.driver.OracleDriver
Properties:
user=scott
password=tiger
选择要在目标中使用的服务器或群集。

重新启动 WebLogic Server。
现在即可使用 Oracle 瘦驱动程序。

同时连接到编码不同的数据库时的限制

使用 OCI 驱动程序时,必须为 NLS_LANG 和 weblogic.codeset 指定相同的编码。如果这些参数设置为相同的值,将在 Oracle 端执行编码转换,因为您是作为具有特定 NLS_LANG 的客户端连接到 Oracle 端的。如果两个参数相同,则无论数据库的编码如何,都能成功进行连接。

gyscsdn 2004-11-17
  • 打赏
  • 举报
回复
JSP

指定 JSP 文件的编码 - pageEncoding(可选)

要指定 WebLogic Server JSP 容器或 JSP 编译器用来读取 JSP 文件的编码,请在 page 标记中指定 pageEncoding 指令,如下所示:

<%@ page contentType="text/html; charset=GB2312" pageEncoding="GB2312" %>
指定页面输出的编码 - page 标记中的 contentType 指令

要指定页面输出的编码,请在 page 标记中指定 contentType 指令,如下所示:

<%@ page contentType="text/html; charset=GB2312" %>
另外,当您在 page 指令中指定 contentType 时,会在 HTTP 响应的 HTTP 头中指定同样的 contentType,这意味着同时指定了浏览器显示的编码。

如果未设置 pageEncoding 指令,会将 contentType 指令用作读取 JSP 文件的编码。

如果 JSP 容器找到 contentType 设置,会停止解析 JSP 文件,将文件读取器切换到这个新指定的编码,重新从头解析 JSP 页。如果在一个文件中指定了多个 contentType,就会出现解析错误。因此,使用静态包含将一个文件包含在另一个文件中时,如果这两个文件都有各自的编码规范,就会出现错误。在动态包含中,不会出现错误,但是将生成乱码字符。

注意:如果在一个文件中发现多个 contentType 实例,这两个实例都使用相同的值,则是有效的,不会导致解析错误。(有关详细信息,请参阅静态与动态包含以及编码差异)。

<jsp-param>
<param-name>backwardCompatible</param-name>
<param-value>true</param-value>
</jsp-param>
例如,当使用静态包含 (<%@ include) 执行包含操作时,如果“包含源”和“包含目标”都有各自的 page 指令,并且一个转换单元有多个 page 指令,则只要每个 page 指令都指定相同的编码,就不会发生任何问题。

指定 HTTP 请求的编码

可以像在 Servlet 中一样,在 JSP 中指定 HTTP 请求的编码。有关详细信息,请参阅 Servlet 部分。

<%
request.setCharacterEncoding("GB2312");
String pval = request.getParameter(pname);
%>request.setCharacterEncoding or <input-charset>
Servlet 和 JSP

Java 编码与 IANA 字符集之间的映射(在 weblogic.xml 中设置)

在 page 标记中使用 setContentType() 方法或 contentType 指令指定编码时,请使用 IANA 字符集名称。但是,在 Java 应用程序 WebLogic Server 中处理这些编码时,这些值必须是 Java 编码名称。WebLogic Server 内部还有默认映射,通常情况下会使用默认映射。默认映射还包含 IANA 中未定义(但通常在 HTML 的 Content-Type 中使用)的映射。(请参阅 WebLogic Server 中定义的 MIME-Java 编码映射表。)

示例:x-sjis ----> Shift_JIS

可以根据自己的需要更改此映射。请按如下所示在 Web 应用程序部署描述符中设置映射。

例如,contentType 中的“Shift_JIS”设置在 WebLogic Server 中作为 SJIS 进行处理,这是因为 IANA 字符集“Shift_JIS”映射到 Java 编码“Shift_JIS”(在 JDK1.4 中,Shift_JIS 作为 SJIS 的别名使用)。

注意:在 Java 1.3 中,IANA 字符集 GB2312 作为 MS936 处理(从 JDK 1.1.8 到 JDK 1.4.0。在 JDK1.4.1 或更高版本中,Shift_JIS 作为 SJIS 处理)。

这样通过默认设置即可使用 MS932 特定的字符集(@ 等)。

为了分配和使用与默认映射不同的编码,请使用下列步骤覆盖默认映射。在 Web 应用程序的部署描述符 (weblogic.xml) 文件中配置 <charset-mapping> 元素。

在下面的示例中,Shift_JIS 映射到 MS932。

<charset-params>
<charset-mapping>
<iana-charset-name>Shift_JIS</iana-charset-name>
<java-charset-name>MS932</java-charset-name>
</charset-mapping>
</charset-params>
请注意,此设置不符合 J2EE。在 WebLogic Server 6.0 中,它在 web.xml 中进行设置。在 WebLogic Server 6.1 或更高版本中,它已经更改为在 Web 应用程序部署描述符 weblogic.xml 中进行设置。同时,元素名称等也进行了更改。因此,如果从 WebLogic Server 6.0 迁移,需要修改 weblogic.xml 和 web.xml 文件。

使用 ISO-8859-1 编码对 HTTP 请求进行编码的方法

如果在 <input-charset> 中将 ISO-8859-1 指定为 HTTP 请求的编码,您仍可以使用下列方法获取具有另一编码的 HTTP 请求。

示例:

new String(request.getParameter(itemQ[i]).getBytes ("8859_1"), "GB2312")
但是,如果 HTTP 客户端用于 HTTP 响应的 HTTP 头中的 contentType 按如下方式指定,则该 HTTP 客户端不能使用此方法。这是因为 HTTP 头中的 contentType 中指定的编码优先于 <input-charset> 中指定的编码。在这种情况下,必须修改应用程序代码。

Content-Type:application/x-www-form-urlencoded;charset=gb2312
静态与动态包含以及编码差异

静态包含

<%@ include file="relativeURL" %>
在这种情况下,在执行 JSP 编译之前,将在一个文件中加载和收集所有包含文件。在 WebLogic Server 6.1 或更早版本中,如果在执行包含操作的文件中指定编码,则被包含的文件将作为编码与包含文件相同的文件进行处理(即使尚未指定其编码)。在 WebLogic Server 8.1 中,如果它们有各自的 page 指令,则会出现编译错误。要避免此问题,请将 weblogic.xml 中的“backwardCompatible”设置为 True。

如果“包含源”与“包含目标”的编码设置不同,则会出现 JSP 编译错误。

动态包含

<jsp:include page="{ relativeURL | <%= expression %>}" flush="true" />
如果使用 jsp:include,加载页面时不会包含此页面,而是留在标记状态中。当执行 JSP 时将包含此页面。因此,执行包含操作的 JSP 中设置的编码不会应用于被包含的文件。

因此,还必须在被包含的文件中指定编码。

CGIServlet

将使用多字节字符的 CGI 服务迁移到 WebLogic Server 中的 CGI Servlet 时,必须在 CGI 程序生成的 HTTP 头中指定适当的 contentType 字符集参数。如果未设置 contentType,则使用 ISO-8859-1,它是 J2EE Servlet 容器的默认编码。

还必须使用 input-charset 参数,以便从客户端正确接收输入字符串。您需要将它写入到目标 Web 应用程序的 DD 文件中。如果未设置它,则使用 ISO-8859-1。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧