- PR -

1.3→1.4へアップグレードしたらコンパイル通らなくなった

投稿者投稿内容
ぴろ
会議室デビュー日: 2003/08/19
投稿数: 5
投稿日時: 2003-08-19 18:44
JAVAのバージョンを1.3.1から1.4.1にバージョンアップしたのですが
1.3.1ではできていたコンパイルが1.4.1ではできなくなってしまいました。

コンパイルエラーになっている箇所は
(黒の旧体字)や潤i年号、昭和を1文字に縮めたもの)
のところです。

  文字リテラルが閉じられていません。
if ( ( '?' <= buf[i] && buf[i] <= '?' )
       ^
というエラーが出てきています。

javacのオプションで -encoding MS932などに指定すると
コンパイルエラーなしで通るようにはなるのですが
なぜ1.3.1で通っていたコンパイルが通らなくなってしまったのか
疑問です。

どなたか、ご存知の方いらっしゃいましたら
ご教授下さい。よろしくお願いします。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2003-08-19 18:52
http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html

の「コラム:Windows-31Jの使用」の部分が参考になるかもしれません。
JDK 1.4.1 とそれ以前とでは "Shift_JIS" の扱いが変わっています。
(自信なしですが)
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2003-08-19 19:14
こんにちは。米山@クロノスです。
以下のサイトは参考になりませんか?

http://www.ingrid.org/java/i18n/encoding/shift_jis.html
ぴろ
会議室デビュー日: 2003/08/19
投稿数: 5
投稿日時: 2003-08-19 19:20
yuzyさん、早速のレスありがとうございます。

先ほどの追加事項ですが
System.getProperty(file.encoding)を実行するとSJIS
になっているので、1.3.1ではSJISでエンコーディング
されているのではないかと思います。

なので、1.4.1でも javac -encoding SJIS ○○.java
で実行してみたのですがコンパイルエラーになってしまいました。

特にShift_JISと指定しているところはないので
Shift_JISの扱いの違いではないと思います。。。
言葉足りずですみませんでした。



ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2003-08-20 00:56
1.3.1でも javac -encoding SJIS ○○.java
としたら、コンパイルできるでしょうか?
(というか、これを試していない理由は何でしょう?試したけど、ここの掲示板には書いていなかったということでしょうか?)

ちなみに私の環境は、Windows2000 SP4(java version "1.3.1_09")ですが、
file.encoding=MS932
となっております。

コンパイルが失敗する環境は、どういった環境なのでしょうか?
ぴろ
会議室デビュー日: 2003/08/19
投稿数: 5
投稿日時: 2003-08-20 10:07
米山@クロノスさん、ふうたさん、
レスありがとうございます。

現在の開発環境ですが
使っているマシンはWindows XP PROですが
リモートログインしてUNIXサーバでJAVAの
開発を行っています。
リモートログイン時にLANG=jp_JP.SJISに
環境変数を設定しています。

環境変数にCLASSPATHは設定してません。
このUNIXサーバにJAVAの1.3.1と1.4.1が同居して
いるので、コンパイルするときは
/jdk131/bin/javac -encoding SJIS ○○
/jdk141/bin/javac -encoding SJIS ○○
とパスを指定してコンパイルを行っています。

コンパイルで試したのは
/jdk131/bin/javac ○○       → コンパイルOK
/jdk131/bin/javac -encoding SJIS ○○ → コンパイルOK
/jdk131/bin/javac -encoding MS932 ○○ → コンパイルOK

/jdk141/bin/javac ○○    → コンパイルエラー
/jdk141/bin/javac -encoding SJIS ○○ → コンパイルエラー
/jdk141/bin/javac -encoding MS932 ○○ → コンパイルOK

です。

何かおかしいと思われるところありましたら
ご指摘下さい。


わらび
ベテラン
会議室デビュー日: 2002/08/30
投稿数: 53
投稿日時: 2003-08-20 11:36
そこまでわかれば、まさしく、yuzyさんや米山@クロノスさんがあげておられる
リンクの内容通りの問題だと思われるのですが?

どういった点がぴろさんは、引っかかっておられるのでしょう?
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2003-08-20 12:04
引用:
ぴろさんの書き込み (2003-08-20 10:07) より:

/jdk131/bin/javac -encoding SJIS ○○ → コンパイルOK

/jdk141/bin/javac -encoding SJIS ○○ → コンパイルエラー


System.out.println("" + "");
byte[] bytes = ("" + "").getBytes();
for(int i = 0 ; i < bytes.length ; i++){
 System.out.print(Integer.toHexString(bytes[i] & 0xFF).toUpperCase() + ",");
}
System.out.println();
のようなコードを -encoding SJIS でコンパイルして結果を出力して見ましたが、
  • jdk1.3.1_08
    • "" + "" -> ??
    • ("" + "").getBytes() -> 3F,3F,
  • jdk1.4.2
    • "" + "" -> ?K??
    • ("" + "").getBytes() -> 3F,4B,3F,3F,
となりました。jdk13 では JIS X 02?? の範囲外でも2バイト文字として取り扱われているようですが、jdk14 では JIS X 02?? の範囲外の文字は1バイト文字として取り扱われているようです。

スキルアップ/キャリアアップ(JOB@IT)