Skip navigation.

マルチバイト環境での使用にあたって

 Previous Next Contents

WebLogic Server 8.1 SP6 での注意点

以下の節では、WebLogic Server 8.1 SP6 を日本語、中国語、韓国語等のマルチバイト言語環境で使用する際の注意点、このリリースの既知の問題および修正された問題について説明します。

 


WebLogic Server 8.1 SP6 での注意点

Itanium HP-UX11.23、IBM AIX 環境におけるインストール (CR200086、CR206783)

日本語版、韓国語版、簡体字中国語版などのアジア言語のインストーラを使用している場合、コマンドラインで -Xmx256M 引数を指定して、最大ヒープ サイズを 256MB に増やす必要があります。たとえば、日本語版のインストーラを使用している場合は、以下のコマンドを入力します。

$ java -Xmx256m -jar pj_platform816_ja_generic.jar -mode=console

公開鍵証明書の UTF-8 エンコーディングサポートについて (CR090467)

WebLogic Server では RFC3280 に基づいて、公開鍵証明書で UTF-8 エンコーディングをサポートしています。RFC3280 の詳細については、Internet X.509 Public Key Infrastructure: Certificate and CRL Profile を参照して下さい。

AIX 上で動作する WebLogic Server SP03 における ISO-2022-JP エンコーディングの使用に関する注意 (CR131694)

AIX 上で IBM JDK1.4.2 を使用して動作する WebLogic Server(SP3) では、日本語を出力する JSP で ISO-2022-JP エンコーディングを使用する場合はパッチが必要となります。なお、パッチの入手方法についてはカスタマーサポートにお問い合わせください。

Administration Console プリファレンスの言語設定追加(CR173345)

WebLogic Server 8.1SP3 リリースの Administration Console プリファレンスに選択可能な言語が追加されました。SP3 で選択可能な設定は以下のとおりです。

	Chinese Simplified/GB18030 
	Chinese Simplified/GB2312 
	Chinese Simplified/GBK 
	Chinese Simplified/UTF-8 
	Chinese Traditional/Big5 
	Chinese Traditional/Big5-HKSCS 
	Chinese Traditional/UTF-8 
	English 
	English/UTF-8 
	Japanese/EUC-JP 
	Japanese/Shift_JIS 
	Japanese/UTF-8
	Korean/EUC-KR 
	Korean/UTF-8
	

マルチバイト文字を含むユーザのAdministration Console へのログイン(CR171053)

WebLogic Server 8.1SP3 リリースではマルチバイト文字を使用したユーザ名の Administration Console へのログインが可能になりました。

BEA Oracle Driver (Type 4) の 'codePageOverride' プロパティについて (日本語を扱う場合のみの注意)

WebLogic Server 8.1SP3 リリースから BEA Oracle Driver (Type 4) の 'codePageOverride' プロパティが追加されました。このプロパティを使用した場合と省略した場合は以下のように振舞います。

codePageOverride プロパティを使用した場合

Oracle データベースは、キャラクタ セット毎に、Unicode とデータベース上のコード ポイントとのマップを持っています。このマップは、文字をデータベースにストアしたり、取り出したりする場合に使用されます。例えば、Oracle Thin ドライバを使用する場合、Oracle データベース サーバ側がこのマップを使用して Unicode とデータベース上のコード ポイントとの変換を行います。

Oracle 用の WebLogic Type4 Driver には、接続先のデータベースのキャラクタ セットが、JA16SJISJA16SJISTILDEJA16SJISYEN のいずれかの場合に限り、この変換を JDK のコンバータのマップを使って行う codePageOverride というプロパティが用意されています。codePageOverride プロパティで指定できる値と動作については、以下のようになります。

codePageOverride=SJIS のとき: 接続先のデータベースのキャラクタ セットで扱うことのできるすべてのマップのうち、JDK の SJIS のコンバータと一致するマップによる変換を保証します。一致しないマップは保証されません。

codePageOverride=MS932 のとき: 接続先のデータベースのキャラクタ セットで扱うことのできるすべてのマップのうち、JDK の MS932 のコンバータと一致するマップによる変換を保証します。一致しないマップは保証されません。

codePageOverride=SJIS を指定した場合と codePageOverride=MS932 を指定した場合の違いは、MS932 コンバータと SJIS コンバータの違いとしてそのまま現れます。例えば、異なる Unicode にマップされる~ (Wave Dash) や¢ (Cent Sign) 等の記号の扱いなどが影響を受けます。Unicode の定義と Java コンバータに起因する文字化け対策 (日本語を扱う場合のみの注意) などを参考に、構築するシステムの要件に合わせて適切な設定を行ってください。

codePageOverride プロパティを省略した場合

WebLogic Server 8.1SP5 以降では、codePageOverride プロパティを省略した場合、接続先のデータベースのキャラクタ セットが JA16SJIS、JA16SJISTILDE、JA16SJISYEN については、データベースにストアする文字の扱いが Oracle Thin ドライバと同じなりました。変更内容や以前のバージョンからのバージョンアップに関する注意点などについては、「BEA WebLogic Type4 JDBC Driver for Oracle の codePageOverride プロパティについて」を参照してください。

jDriver for Oracle から移行する場合の注意

JA16SJIS キャラクタ セットのデータベースに対して jDriver for Oracle を使用していて、WebLogic Type4 Oracle ドライバに移行した際に~ (Wave Dash) が文字化けする場合は、データベースを JA16SJISTILDE に移行するか、codePageOverride=MS932 を指定することで回避できます。

Avitek Medical Record 開発チュートリアルについて (日本語版インストーラのみの注意)

%WL_HOME%\samples\server\medrec\src_ja 配下の日本語サンプルコードは WebLogic Server 8.1SP4 と同一のものがインストールされます。最新版のサンプルコードをご利用になりたい場合は、%WL_HOME%\samples\server\medrec\src 配下をご利用下さい。

Sun JDK 1.4.2_04 における ISO-2022-JP エンコーディングの使用に関する問題

SP3 にバンドルされる Sun JDK 1.4.2_04 または JRockit8.1SP3 で ISO-2022-JP エンコーディングを使用すると、java.nio.BufferOverflowException が発生する場合があります。これは Sun JDK におけるバグで、http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5017922 に報告されています。ISO-2022-JP エンコーディングを使用する場合は Sun JDK 1.4.2_05 もしくはそれに相当するバージョンの JRockit VM を使用するか、これらをバンドルする SP4 をお使いください。

	(補足) 具体的には以下のようなコードを実行すると例外が発生します。

   		byte[] b = "あ".getBytes("ISO-2022-JP");

Form-Based 認証での入力エンコーディングの指定(CR123333)(J2EE非準拠)

SP2リリースより Form-Based 認証の入力エンコーディングをフォーム内で指定できるようになりました。次のように使用するエンコーディング名を j_character_encoding に指定してください。なお、この機能は J2EE の仕様には存在しません。WebLogic Server 独自の機能です。

      < form method="POST" action="j_security_check" >


      Username: <input type="text" name="j_username">


      Password: <input type="password" name="j_password">


      <input type="hidden" name="j_character_encoding" value="Shift_JIS">


      <input type="submit" value="Login">


      <input type="reset" value="Reset">


      </form>

SOAP メッセージに添付するXMLの エンコーディングについて

Webサービスの SOAP メッセージに XML (javax.xml.transform.Source オブジェクト)を添付するときには XML のヘッダに任意のエンコーディングを指定することができます。ただし、そのメッセージを受け取り、添付されている XML データを取り出すときにはヘッダのエンコーディングは UTF-8 に なります。

UNIX へインストールする場合のロケール

日本語版インストーラを使用する際には、インストーラを起動するコマンドシェルのロケールを Shift_JIS 系のものに切り替えてください。EUC-JP や UTF-8 もしくは C など Shift_JIS 系以外を使用するとサンプルコードなど日本語を含んだテキストファイルが正しくインストールされません。また、韓国語版、簡体字中国語版、繁体字中国語版インストーラを使用する際には、インストーラを起動するコマンドシェルのロケールを、UTF-8 以外の各言語用のものに切り替えてください。

インストールの際には以下のロケール環境下でインストーラを起動してください。

日本語の場合

Solaris : ja_JP.PCK
HP : ja_JP.SJIS
Linux : ja_JP.SJIS

例:

$ setenv LANG ja_JP.SJIS

お使いのLinux環境で例えば SJIS ロケールが使用できない場合(locale -a を実行してもja_JP.SJIS が存在しない場合)、以下の手順でロケールを用意します。

# su
# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS

JDK1.4.1 またはそれ以降のバージョンでの 'Shift_JIS' エンコーディングのエイリアスの変更

JDK1.4.1 から 'Shift_JIS' エンコーディングは 'SJIS' エンコーディングとして扱われます。

WebLogicServer 8.1 SP1 またはそれ以降のサービスパックでは、JDK1.4.1 またはそれ以降のバージョンで動作するので、'Shift_JIS' のエイリアス変更の影響を受けます。なお、WebLogic Server7.0 までに使われていた JDK(JDK1.3) では 'Shift_JIS' は 'MS932' のエイリアスでした。

WebLogicServerのシステムで持つIANA-Java マッピングは IANA charset 名の'Shift_JIS' は Java エンコーディング名の Shift_JIS として扱われます。このため、JSP や Servlet または web サービスで Shift_JIS を使用した場合に動作がこれまでとは異なります。例えば、MS932独自の文字('@' など)が'?'になってしまいます。このため、MS932 をこれまでどおり使用したい場合は、IANA名の'Windows-31j'を使用します。MS932 を使用するには、下記の方法1または2を行ってください。

方法1 --- JSP/Servlet などのプログラムファイルを書き換える

  1. --- JSP では page タグを Shift_JIS から Windows-31J に書き換える。

    例:

    JSP に以下の行が存在し、かつ、MS932 キャラクタを使用する場合、

    <%@ page contentType="text/html; CHARSET=Shift_JIS" %>

    以下のように変更する。

    <%@ page contentType="text/html; CHARSET=Windows-31J" %>

  2. --- Servlet では setContentType() 指定を変更する。

    Servlet の場合、以下の指定が存在し、かつ、MS932 キャラクタを使用する場合、

    response.setContentType("text/html;charset=Shift_JIS");

    以下のように変更する。

    response.setContentType("text/html;charset=Windows-31J");

'Windows-31J' は IANA に正式に登録されている文字集合の名称であり、Microsoftのコードページ 932 に相当します。また、MS932はJava における Microsoft のコードページ 932 に相当します。従いまして、IANA の'Windows-31J'は Java における'MS932'ですが、実は Java では'Windows-31J'も MS932 のエイリアスとして存在します。現在 Java のエンコーディング名は今後はIANA名に一致させる方向です。今後は Microsoft のコードページ 932 に相当する文字セットを使用する場合は'Windows-31J'を使用することを強くお勧めします。

方法2 --- weblogic.xml でマッピングを変更する(J2EE非準拠)

weblogic.xmlデプロイメントディスクリプタファイルでIANA名の Shift_JIS を Java 名の Windows-31J に強制的にマップすることができます。これにより、JSPやServlet のコードを書き換えることなく Windows-31J として動作させることが可能です。以下のエントリを weblogic.xml に記述して、webアプリケーションを再デプロイしてください。

コード リスト 1-1 weblogic.xml

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application
8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
  <charset-params>
    <charset-mapping>
      <iana-charset-name>Shift_JIS</iana-charset-name>
      <java-charset-name>Windows-31J</java-charset-name>
    </charset-mapping>
  </charset-params>
</weblogic-web-app>

ただし、この方法は WebLogic Server 独自であり、J2EE準拠ではありません。つまり他のJ2EE Servlet コンテナとの相互運用性がありません。また、IANA 名の'Shift_JIS'はあくまでも JIS X 0201 + JIS X 0208 に相当する文字セットですので、これを Microsoft のコードページ 932 として使用することは適切ではありません。したがって、何らかの理由により JSP や Servlet のコードを修正することが難しい場合にのみこの方法を使用して下さい。

Global CharsetMap

WebLogicServer8.1では Global IANA-Java Charset MAP が使用されるようになりました。これまで IANAのcharset名と Java のエンコーディング名のマッピングはいくつかのコンポーネントで独自に持っていました。これを一ヶ所に集約することで、IANA 名と Java名 のマッピングをコンポーネントにまたがっても一貫して行えるようになりました。

SOAP1.2 の media type に対応

SOAP1.2 では HTTP SOAP メッセージに使用するメディアタイプは'application/soap+xml' です。SOAP1.1で使用されていたメディアタイプ 'text/xml' の場合と動作はほとんど同じですが、HTTPヘッダの contentType に Charset 指定がない場合の動作が異なります。

[HTTP、contentType charset指定なしの場合]

SOAP1.1:

デフォルトの文字セットは us-ascii です。XMLヘッダの encoding 指定は無視します。WebLogic Server8.1 では SOAP1.1 メッセージは RFC2376 に準拠してエンコーディングを取り扱います。

SOAP1.2:

XMLヘッダのencoding指定が有効となります。XMLヘッダにencoding指定がない場合、UTF-8がデフォルトの文字セットです。WebLogic Server8.1ではSOAP1.2メッセージはRFC3023に準拠してエンコーディングを取り扱います。

WebLogic Server が生成するSOAP メッセージのエンコーディングの指定

WebLogic Server がSOAPメッセージを生成する場合、キャラクタエンコーディングのデフォルトはUTF-8です。WebLogic Server 8.1では、生成するSOAPメッセージのエンコーディングを使用する環境によっては指定することが可能になりました。

エンコーディングを指定する方法としては、Webサービスコンポーネントで強制的に生成するメッセージのエンコーディングを決めてしまう方法、クライアントからのHTTPリクエスト中のHTTPヘッダに'Accept-Charset'パラメータを指定し、そのリクエストに沿ったエンコーディングで生成する方法、さらにサーバ起動時にデフォルトを指定する方法の3種類があります。

生成するSOAPメッセージでエンコーディングを指定する方法

  1. web-service.xml デプロイメントディスクリプタのcharset属性
  2. クライアントからのHTTPリクエストのAccept-Charset
  3. -Dweblogic.webservice.i18n.charset

注意: サーバのデフォルトは UTF-8 です。

詳細についてはwebservice の internationalization の項を参照してください。

http://edocs.beasys.co.jp/e-docs/wls/docs81/webserv/i18n.html

URLでのマルチバイト文字の使用(CR092089)

サーブレットコンテナ(Webコンテナ)で URL にマルチバイトを使用することができるようになりました。使用するUser agent (web ブラウザなど)に応じて、必要であればサーバの設定を行います。

例えば、以下のような HTTP リクエストを受信した場合、

http://myHostName:port/myContextPath/myRequest/?myRequestParameter

myContextPath、myRequest 部分は以下のように動作します。

注意: myRequestParameter 部は URL デコード後、Servlet の setCharacterEncoding() で指定されたエンコーディング、または weblogic.xml のinput-charset で指定されたエンコーディングにより デコードされます。また、myHostName 部は IESG により、国際化ドメイン名として現在標準化作業が進められています。

デフォルトの動作 (UTF-8 をベースエンコーディングとして URL デコード)

何も設定しない場合、WebLogic Server 8.1 では以下のように HTTP リクエストを扱います。

  1. myContextPath、myRequest 部を URL デコード する
  2. 1) で得られたバイトストリームを UTF-8 文字列としてデコードし String化する

たとえば、User agent (web ブラウザ)がMS IE(マイクロソフト インターネットエクスプローラ)の場合、デフォルトではアドレスバーに入力されたマルチバイト文字はまず UTF-8でエンコードされ、それがURLエンコードされます。 WebLogic Server 8.1 では、デフォルトでこの UTF-8 で送られるURLを正しくString 化することが可能となりました。

注意: IE の「インターネットオプション」の「詳細設定」に「常に UTF-8 としてURL を送信する(再起動が必要)」というオプションがありますが、このオプションは ONに(チェック)しておく必要があります。

URL デコードする際の文字エンコーディングを指定する方法

User agent が Netscape の場合

User agent が Netscape の場合、アドレスバーの文字は Netscape が動作する環境の文字セットでエンコードされ、さらにその文字列が URL エンコードされてサーバへ送信されます。たとえば日本語 Windows 上では Windows-31J でエンコードされた文字列が URLエンコードされることになります。WebLogic Server 8.1 では URL デコードした後のバイトストリームを Windows-31J でデコードするように設定することによりこのリクエストを正しく取得することができます。次の WebLogicServer の起動オプションにより URLデコードするエンコーディングを変更することができます。

-Dweblogic.http.URIDecodeEncoding=Windows-31J (デフォルトは UTF-8)

ただし、この設定は一つのサーバインスタンスで一つのみ可能です。

独自の User Agent を使用する場合

リクエスト URI にマルチバイトが必要な場合には、文字列は UTF-8 でバイト列にした後、URLエンコードして WebLogicServer に送信するようにしてください。

尚、URIを作る際に UTF-8をベースに URL エンコードすることは W3C で推奨されています。(http://www.w3.org/TR/charmod/#sec-URIs)

JSP J2EE 仕様による動作の変更 (WebLogic Server 7.0 より)

JSP 1.2の仕様では Page ディレクティブが複数存在した場合には 'Fatal translation Error' となります。(CR066562)

JSP1.2からの抜粋 ---- JSP.2.10.1

JSP.2.10.1 The page Directive

The page directive defines a number of page dependent properties and Communicates these to the JSP container.

A translation unit (JSP source file and any files included via the include directive) can contain more than one instance of the page directive, all the attributes will apply to the complete translation unit (i.e. page directives are position independent). However, there shall be only one occurrence of any attribute/value defined by this directive in a given translation unit with the exception of the import attribute; multiple uses of this attribute are cumulative (with ordered set union semantics). Other such multiple attribute/value (re)definitions result in a fatal translation error.

ひとつのコンパイル単位で複数の page directive が出現したら fatal translation error となる、というものです。WebLogicServer7.0 ではこの仕様に準拠するように JSP の動作が変更になっています。

この変更により問題となるのは、静的 include (<%@ include file=. . . %>)で別の JSP ファイルをインクルードした場合、インクルード元、インクルード先のそれぞれで page directive を持っている場合です。静的インクルードではインクルードした結果できるjsp全体を1コンパイル単位として JSP コンテナが評価するため、この場合 page directive が複数存在することになり、 'Fatal translation Error'が発生します。

この問題を回避するため、WebLogicServer7.0 では以下のオプションを weblogic.xml の新規パラメータとして用意しました。

コード リスト 1-2 weblogic.xml に追加された新規パラメータ

<jsp-param>
  <param-name>backwardCompatible</param-name>
  <param-value>true</param-value>
</jsp-param>

これにより、page directive が 1 コンパイル単位で複数回出現しても、そのencodingが同一であればエラーは発生しません。

J2EE デフォルトのエンコーディングの指定 (WebLogic Server 7.0 より)

weblogic-application.xml で J2EE エンタープライズアプリケーション全体でリクエストとレスポンスに対するデフォルトの文字エンコーディングの指定が可能になりました。(CR065921)

weblogic-application.xml で次のパラメータのどちらかをセットすることにより、リクエストとレスポンスで使用するデフォルトのエンコーディングを設定することができます。

注意: webapp.encoding.default で指定する値は Java エンコーディング名であり、IANA の文字セット名ではありません。

もしも、上記の 2 つのオプションが両方ともセットされていると、webapp.encoding.usevmdefault が優先して使用されます。

なお、これらの値は リクエストやレスポンスストリームに対する個別の指定によって上書きされます。また、これらのオプションは、リクエストとレスポンスのみに有効であり、JSPのコンパイル時の読み込みのエンコーディングには適用されません。リクエストやレスポンスストリームに対する個別の指定、JSPファイルのエンコーディング指定の方法については、プログラミングを参照してください。

コード リスト 1-3 webapp.encoding.usevmdefault の使用例 (weblogic-application.xml)

<application-param>
  <description>webapp.usevmdefault</description>
  <param-name>webapp.encoding.usevmdefault</param-name>
  <param-value>true</param-value>
</application-param>

または

コード リスト 1-4 weblogic_application.xml のwebapp.encoding.default の使用例

<application-param>
  <description>default encoding</description>
  <param-name>webapp.encoding.default</param-name>
  <param-value>SJIS</param-value>
</application-param>

WTC TUXEDOドメインに対するエンコーディングの指定(CR052022) (WebLogic Server 7.0 より)

TUXEDO のドメインに対してwtc のドメインのエンコーディングを指定することができます。以下のパラメータを起動時に指定します。サーバのスタートスクリプト(StartWebLogic.cmdファイルなど)を変更します。

-Dweblogic.wtc.encoding=Java エンコーディング名

このエンコーディング指定はTUXEDO ドメイン全体に対して有効です。

XML -- StreamParser のマルチバイト文字の扱い (WebLogic Server 7.0 より)

XML Streaming APIを使用して生成する XML のヘッダにエンコーディング情報を付加するには、ElementFactory クラスの createStartDocument() を使用して以下のように行います。

XMLOutputStreamFactory factory = XMLOutputStreamFactory.newInstance();
XMLOutputStream output = factory.newOutputStream(new
			OutputStreamWriter(new FileOutputStream(fname),"Shift_JIS")); 
output.add(ElementFactory.createStartDocument("Shift_JIS","1.0"));
output.flush();

なお、XML StreamingAPIを使用して日本語を含むXMLドキュメントをパースする場合はxercesパーサなどと同様に以下の点にご注意ください。

デプロイメントディスクリプタファイルのエンコーディングの扱い

WebLogic Builder や管理コンソールなどからデプロイメントディスクリプタファイルを編集して保存する際、元のデプロイメントディスクリプタファイルのエンコーディングは保存されます。デプロイメントディスクリプタファイルのXML宣言に encoding 属性がない場合、および XML 宣言がない場合、ファイルは UTF-8 として扱われます。

 


既知の問題点

WebLogic Server に関する確認済みの問題

Administration Console に関する確認済みの問題

コンフィグレーションウィザードに関する確認済みの問題

インストールに関する確認済みの問題

JDBC に関する確認済みの問題

WebLogic のツールに関する確認済みの問題

Web サービスに関する確認済みの問題

 


修正された問題

WebLogic Server に関する修正済みの問題

Administration Console に関する修正済みの問題

Web サービスに関する修正済みの問題

JRockit に関する修正済みの問題

 

Back to Top Previous Next