• ベストアンサー

Javaでデフォルトエンコーディングについて質問します。

Javaでデフォルトエンコーディングについて質問します。 OSはWindowsXPです。 String.getBytes()などを使ったとき、文字コードはデフォルトのものが使われます。 WindowsXPなら、UTF-8がデフォルトのはずです。 ですが、とあるマシン1台のみ、Windows-31Jがデフォルトになってしまいます。 これは、何が原因なのでしょうか? もともとマシンを使っていた人間が細工をしたのでしょうが、突然行方をくらましたため、元に戻す方法が分かりません。

  • Java
  • 回答数3
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

デフォルトエンコーディングがUTF-8やWindows-31Jになっていることはどうやって確認したんですか? public class FileEncoding { public static void main(String[] args) { System.out.println(System.getProperty("file.encoding")); } } このプログラムを、Eclipseを使わずに実行したらどんな結果になりますか? WTPというのは使ったことがないのでどこにどんな設定があるのか分かりません。

kotoby2003
質問者

お礼

あはは・・・ 鋭い指摘でした。 上記のコードをEclipse上で実行したら、UTF-8が返ってきましたが、Eclipseの外(コマンドライン)で実行したら、MS932が返ってきました。 Eclipseの問題なんですね・・・。 ちなみに、デフォルトエンコーディングを確認した方法は、デバッグモードを使っただけです。 Eclipseの設定で、デフォルトエンコーディングを変える方法についてですが・・・ プログラムごとであれば、実行の構成の「共通」タブでエンコーディングを変更できることはわかりました。 が、全体的な設定はどこでやっているのかわかりませんでした。 →と思ったら、どうも、「テキストファイル・エンコーディング」(プロジェクトプロパティのリソース)を引き継ぐようです。さらにこれは、(昔と違って探すのに苦労しましたが) ウィンドウ>設定>一般>ワークスペース にありました。 みなさん、どうもありがとうございました。

その他の回答 (2)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

そんなときのために デフォルトを使わずに 直接指定するのをお勧めするわ。 可能な限り環境に依存しない実装が望ましいわ。 LocaleやTimezoneもそうよね。 #1さんのを利用して 起動時に指定するのもひとつの手よね。

kotoby2003
質問者

お礼

おっしゃるとおりです。 最終的な解決策は、きちんと文字コードを明示することです。 開発環境はWindows、実行環境はLinuxであり、文字コードはシフトJISであるため、これは必須なことでした。 ただ、メンバのマシンによって設定が違うのは余計な混乱を招く(招いた)ため、できるなら統一したいと思って質問しました。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> WindowsXPなら、UTF-8がデフォルトのはずです。 XPでも7でも、Windowsの日本語環境ならばデフォルトエンコーディングはMS932が普通です。今どきのLinuxならばUTF-8でしょうが。 javaの起動オプションで -Dfile.encoding= を指定していたりしませんか?

kotoby2003
質問者

お礼

あら。 WindowsXPからUTF-8になった、というのは思い違いでしたか・・・。 そんなことが書かれたページを見たような気がして、信じちゃいました。 javaの起動オプションもいじってないと思うんですが・・・。 Eclipse上でWTPを使ってTomcatを起動しています。 とすると、起動オプションはこのTomcatの起動オプションで設定する、ということであってますよね? そのマシンを使っているメンバは、こんな設定をいじれるような知識はなさそうなので、変更したとは思えないんですが。

関連するQ&A

  • Windows-31Jからutf-8への変換が分かりません><

    Windows-31Jからutf-8への変換が分かりません>< java超ビギナーです。 SJISで書かれたCSVファイルのデータを、 CREATE TABLE `rep_test` ( `rep_name` varchar(48) NOT NULL, `rep_name_kana` varchar(48) DEFAULT NULL, `rep_id` varchar(16) DEFAULT NULL, PRIMARY KEY (`rep_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 こんな感じで作ったMySQLにINSERTする部分をJAVAで書いているんですが、 取り込んだ文字が化けます… 取り込む部分は、JPAとかいうのを使って書いていて、 以下のような感じです。 getBytes("Windows-31J"), "utf-8" 内の文字の組み合わせ いろいろやってもダメでした… どのようにすればいいのか、 ドナタか心優しい方、教えてくださいm(__)m @TransactionAttribute(TransactionAttributeType.REQUIRED) public int insertRows( CSVReader reader ) throws IOException { EntityManager em = emf.createEntityManager(); String [] nextLine; while ( ( nextLine = reader.readNext() ) != null ) { RepTest rep = new RepTest(); rep.setRepId( new String( nextLine[0].getBytes("Windows-31J"), "utf-8" ) ); rep.setRepNameKana( new String( nextLine[1].getBytes("Windows-31J"), "utf-8" ) ); rep.setRepName( new String( nextLine[2].getBytes("Windows-31J"), "utf-8" ) ); // execute insert em.persist( rep ); } em.close(); return 0; }

    • ベストアンサー
    • Java
  • Java 文字コードのエンコーディングについて

    Java 文字コードのエンコーディングについて こんばんわ。 eclipse3.5で開発(UTF-8)しているソースを、DOS窓でコンパイルすると、勝手にMS932でマッピングしようとするんですよね。 何故だかわかる方いらっしゃいませんか? また、解決策等を教えていただけると幸いです。 eclipseで開発してるのに、態々DOS窓でコンパイルしなくてもってのはなしでお願いします。(仕事上必要)

    • ベストアンサー
    • Java
  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • Java
  • pythonの文字エンコーディングについて

    pythonのデフォルトエンコーディングは asciiコードですよね? まず mod_wsgiモジュールを用いてapache上で実行したいと思っています。 そこで通常はマジックコメントで #cofing: utf-8 とかかなければ日本語などのマルチバイトは使用できませんよね? それを http://d.hatena.ne.jp/ama-ch/20080610/1213073848 上記ページを参考に import sys sys.setdefaultencofing("utf-8"); とかいて、やればれスクリプトを記述したファイルの冒頭で # coding: utf-8 のマジックコメントを書かなくてもよくなるのかなとおもったのですが そうはいきませんでした。 私のは考えはデフォルトの文字コードが utf-8なら マジックコメントを記述しなくても日本語があつかえるだろうと思っていたのですが・・・・。 上記ページを参考にしてデフォルトの文字コードをutf-8したにも関わらず スクリプトはマジックコメントを記入しなければ 日本語が表示されないのでしょうか? pythonのversionは2.7.2です。

  • サーバーサイドJAVAの文字エンコーディングについて

    はじめまして。JAVAの初心者です。質問があります。 HTMLフォームで日本語をJSPに送信してJSPページで setCharacterEncoding()メソッドを使用すると、 文字化けは回避できるのですが、 String s = new String(str.getBytes("ISO-8859-1"),"Shift_JIS") でsを表示すると文字化けします。sを表示して文字化けをしないため には、何か設定が必要なのでしょうか?どうかご教授をお願いします。 現在の環境はプラットフォームがWindowsXPで、JavaコンテナがTomcat5.5.17を使用し、JDK1.5を使用しています。

    • ベストアンサー
    • Java
  • UTF-8とUTF-16について質問です。

    まず、【あ】という文字をUTF-16というエンコーディング方式で バイト配列化すると [0] => 66 [1] => 48 というバイト値が帰ってきます。 これはとりあえずC#で処理を行いました。 Encoding encode = Encoding.GetEncoding("UTF-16"); String value = "あ"; Byte [] byteData = encode.GetBytes(value); それでは【あ】という文字の文字集合のコードポイントは右記となります。【0x3042】 これは、出力された 66、48という数値を16進数に変換すると 66=>42 48=>30 となり、リトルエンディアン環境で 0x4230という16進数であらわされるようです。 この点も不思議なのですが今回知りたいのはUTF-16でエンコーディングされた バイト配列はこのように文字集合のコードポイントに復帰?させることができますよね? ではUTF-8でエンコーディングされた【あ】という文字の バイト配列 [0] => 227 [1] => 129 [2] => 130 というバイト配列を上記のような文字集合のコードポイントの値へ復帰させることは できるのでしょうか? それに伴いUTF-8でつかわれる文字集合もUTF-16と同じコードポイントなのでしょうか? 上記 1.UTF-8でエンコーディングされた文字列をバイト配列にした場合 元の文字集合に戻せるのか?戻せるならばその戻し方は? 2.UTF-8がさす文字集合とUTF-16がさす文字集合はおなじものですよね? 上記二点よろしくご教授ください。

  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaは、SJISとUTF-8のどちらがデフォルトなのでしょうか?

    javaは、SJISとUTF-8のどちらがデフォルトなのでしょうか? 現在PCにインストールしているJavaのバージョンは、Version 6 Update 21です。 eclips上のコンソールで実行すると、入力がUTF-8の為、equals()での比較が出来ません。 //---以下サンプルソース-- System.out.println("入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strTmp = br.readLine(); //入力 StringBuffer sb = new StringBuffer(); //入力で、”終了”を入力しても、strTmp.equals("終了")が、TRUEになりません。 while(!strTmp.equals("終了")){ sb.append(strTmp); strTmp = br.readLine(); //入力 } //---ここまで--- DOS窓上で、「javac -encoding utf8 sample.java」とやって、テストすると入力もSJISな為、”終了”で終了します。 これは、eclipsの問題ですか? javaのインストール時の設定の問題ですか? 初歩的な質問で、恐縮ですが、どうかご教授下さい。m(_。_)m

    • ベストアンサー
    • Java
  • java起動時の日本語引数文字化けについて

    java初心者です。 C++ソースからCreateProcess関数を用いてjava.exeを起動し、アプリケーションを起動させるアプリケーションを作成しています。 現在、java側で日本語が文字化けしてしまい、期待する動作が得られていません。 具体的には起動するjavaアプリケーションに引数としてパスを渡しており、そのパスに 日本語が含まれていると文字化けにより解釈できないという状況です。 日本語がアプリケーション内部で正しく利用できるようにはどのようにすれば良いでしょうか。 環境は以下の通りです。 ※情報が足りない等ありましたらお願い致します。。 OS:WindowsXP C++の開発環境:VC6 CreateProcess関数起動時の文字コード:UTF8 java開発環境:eclipse3.5 javaの引数はStringで受けるのですが、java内部ではUTF16らしいので、UTF8で記述された 文字列をUTF16として読むため文字化けしているのかなと調べた結果推測しています。 だとすると、java側で引数で受けた文字列をUTF-8からUTF-16に変換すれば良いのかなと 考えています。 ではその場合どのような処理が必要になるのでしょうか。(String#getBytes()を使う?) 後、javaコンパイル時にエンコードを指定するという方法もあるようですが、その方法は 他へ影響が大きいため、利用できそうにありません。 情報が足りない等あればお願い致します。 ご回答よろしくお願い致します。

  • Javaでの文字化けの検出

    Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。

専門家に質問してみよう