takt@Wiki

Java

最終更新:

匿名ユーザー

- view
メンバー限定 登録/ログイン

Eclipse

Eclipse起動オプション
Eclipse.exe -VM c:\java\javaw.exe -VMargs -Vms256M -Vmx512M

-VM     JVMの指定
-VMargs JVMへの引数 [-Vms 最小HeapSize][-Vmx 最大HeapSize]

文字化け


WebSphereなどのIBM製品を使用し、Windows環境で作成した「shift_jis」文字CODEと
「euc」や「iso2022-jp」文字CODEのテキストとの相互変換を行い文字化けをする時があるようで対象となる文字は・・

「∥」二重縦線
「~」波線
「-」記号(マイナス)
「¢」記号(セント)
「£」記号(ポンド)
「¬」記号(ノット)

理由は、Windows環境で作成した「shift_jis」の文字CODEが、
「MS932」文字CODEとして保存される為。

□補足
「MS932」文字CODEとはMicroSoft社が定義をした文字CODE。
上記の6文字の文字CODEが「shift_jis」と異なる。
他に"①"などの機種依存文字も含む文字CODE。

「shift_jis」, 「euc-jp」, 「iso2022-jp」は,
「JIS X 0208」として定義されている。

各文字コード一覧
MS932 SJIS EUC-JP ISO-2022-JP
0xFF5E 0x301C 0x301C 0x301C
0x2225 0x2016 0x2016 0x2016
0xFF0D 0x2212 0x2212 0x2212
0xFFE0 0x00A2 0x00A2 0x00A2
0xFFE1 0x00A3 0x00A3 0x00A3
0xFFE2 0x00AC 0x00AC 0x00AC


□文字化けの原因
IBM製品で取り扱う文字コードの種類は
「MS932」「shift_jis」「euc-jp」「iso2022-jp」と4種類あり(utf-8とutf-16は除く)、
「shift_jis」「euc-jp」「iso2022-jp」の3種類の中で相互に文字CODEの変換を行う分には文字化けはしないが、「MS932」との変換を行うと文字化けする。

つまり
MS932←→shift_jis
MS932←→euc-jp
MS932←→iso2022-jp
は、文字化けする。
shift_jis←→shift_jis/euc-jp/iso2022-jp
euc-jp←→shift_jis/euc-jp/iso2022-jp
iso2022-jp←→shift_jis/euc-jp/iso2022-jp
は、文字化けしない。

□ASTERIAの各バージョンによる文字コードの取り扱い

  • ASTERIA R2で使用する文字コードは以下のようになります。

"shift_jis"→MS932文字コードとして取り扱いをします。
"SJIS"→shift_jis文字コードとして取り扱いをします。
"euc-jp"→euc-jp文字コードとして取り扱いをします。
"iso2022-jp"→iso2022-jp文字コードとして取り扱いをします。

注)Windows環境で作成したテキストは"shift_jis"と指定するだけで読み込みが可能です。

  • ASTERIA 3で使用する文字コードは以下のようになります。

"shift_jis"→shift_jis文字コードとして取り扱いをします。
"Windows-31J"→MS932文字コードとして取り扱いをします。
"euc-jp"→euc-jp文字コードとして取り扱いをします。
"iso2022-jp"→iso2022-jp文字コードとして取り扱いをします。

注)Windows環境で作成したテキストは明示的に"Windows-31J"と指定することで読み込みが可能です。
"shift_jis"の指定の場合には上記文字コードの場合には文字化けをします。

ASTERIA R2とASTERIA3で指定方法が異なるのは、ASTERIAが使用しているJava環境のバージョンの違いによるものです。

□文字化けの解消

ASTERIAでMS932とshift_jis, euc-jp, iso2022-jpの相互に文字コードを変換する場合には、
別途提供しておりますJava関数を使用することで文字化けを解消することができます。

例)
MS932文字コード

Java関数(A)

shift_jis
euc-jp
iso2022-jp


shift_jis
euc-jp
iso2022-jp

Java関数(B)

MS932文字コード


  • Java関数(A)
MS932文字コードのテキストをASTERIAのString型に読み込むときにJIS X 0208として変換を行います。
この変換によりString型からshift_jis, euc-jp, iso2022-jpへの相互変換においての文字化けが解消いたします。

#
#String s = in[0].strValue();
#int len = s.length();
#StringBuffer buf =new StringBuffer(len);
#for (int i=0; i<len; i++) {
# char c = s.charAt(i);
#  switch (c) {
#    case 'uFF5E': c = 'u301C'; break;
#    case 'u2225': c = 'u2016'; break;
#    case 'uFF0D': c = 'u2212'; break;
#    case 'uFFE0': c = 'u00A2'; break;
#    case 'uFFE1': c = 'u00A3'; break;
#    case 'uFFE2': c = 'u00AC'; break;
#  }
#  buf.append(c);
#}
#out.setValue(buf.toString());
#

  • Java関数(B)
JIS X 0208のテキストをASTERIAのString型からMS932として変換を行います。
この変換によりJIS X 0208(String型)からMS932への変換においての文字化けが解消いたします。

#
#String s = in[0].strValue();
#int len = s.length();
#StringBuffer buf =new StringBuffer(len);
#  for (int i=0; i<len; i++) {
#  char c = s.charAt(i);
#  switch (c) {
#    case 'u301C': c = 'uFF5E'; break;
#    case 'u2016': c = 'u2225'; break;
#    case 'u2212': c = 'uFF0D'; break;
#    case 'u00A2': c = 'uFFE0'; break;
#    case 'u00A3': c = 'uFFE1'; break;
#    case 'u00AC': c = 'uFFE2'; break;
#  }
#  buf.append(c);
#}
#out.setValue(buf.toString());
#

Java関数(A)ではinputdata_AにはMS932文字コードを含む文字列が定義されていることを想定し、outputdata_AにはJIS X 0208に変換したテキストを出力します。
Java関数(B)ではinputdata_BにはJIS X 0208を含む文字列が定義されていることを想定し、outputdata_BにはMS932文字コードに変換したテキストを出力します。

注)これらの関数は文字数が増加するに従い条件判断の回数も増加するため、処理速度は文字数に比例してかかることとなります。
目安箱バナー