• 締切済み

ECUのファイルを読むと、一部「?」表記になります。

EUCのファイルを読み、 String strEUC = EUCファイルから取得した文字列 String uniMoji = new String(strEUC.getBytes(),"EUC-JP"); と記述すると「uniMoji」に格納された文字列の一部だけ文字化けします。 具体的には 「八重洲中央口」が「八重洲中央?」、 「中央口」が「中央?」、 「東京駅」が「??駅」 と、表記され、 特定文字のみが?表記になってしまいます。 これを回避するにはどのようにすればよろしいでしょうか? 宜しくお願い致します。

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

みんなの回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

>やはりStringに一度入れてしまうと無理なんでしょうかねぇ。 いや、普通は私が示したロジックのように、読むときにちゃんとエンコードして読みますから、 Stringの中は通常のunicodeとして扱えるはずだと思います。 ANo.2さんがおっしゃっているように、「すでに正しくエンコードされているはず」 というのが普通の考え方ですが。 どのようにファイルから読み取られているかがポイントですね。 >私ではない他の方が管理している部分なので などとは言っていられないと思います。 複数人でプロジェクトを組んでいるのなら、システムが正しく動作しないのは一人の問題ではなく全員の問題ですから、あなた一人でなんとかしようとする必要は無いと思いますが。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

変換しなくても strEUCの中は正しくエンコードされた文字列が入っているのではないのですか?

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

>String strEUC = EUCファイルから取得した文字列 この時点でStringに入れてしまっているのがおかしいのでは? そもそも、ファイルからのデータ取得なら、InputStreamReaderを使うとおもうのですが、 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "EUC-JP")); String str; while((str = reader.readLine()) != null){ // 読み込んだ1行分のEUC-JPのデータに対する処理 } ※ごめん、うろ覚えで書いてますので、正しい構文はJAVA docで調べてみてください。

miranosan
質問者

お礼

PED02744様 ご回答ありがとうございます。 やはりStringに一度入れてしまうと無理なんでしょうかねぇ。 EUCファイルからデータ取得する構文は、 私ではない他の方が管理している部分なので、 現状、取得する部分を触らずに どうにかしてデータ取得した後に何とか出来ないかなと思った次第であります。

関連するQ&A

  • Shift_JISコードでファイルを生成する方法

    いつもお世話になります。 環境サーバLinax、クライアントWindows2000、IE6でプログラミングしています。 JSPで、FileWriterを使用してCSVファイルを生成しているのですが、EUC-JPコードで記録されてしまい、リンクを張ってもクライアントにダウンロードしたCSVファイルは文字化けしてしまいます。 new String(strVal.getBytes("8859_1"),"Shift_JIS") と変換して書き出しても文字化けが起こるばかりでどうしようも無いです。 どうすればShift_JISでファイルを生成できるのか、またはShift_JISでファイルをダウンロードする方法を教えてもらえないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • インスタンス

    String s1 = new String(str1.getBytes("8859_1"), "x-euc-jp"); s1 = new String(str2.getBytes("8859_1"), "x-euc-jp"); s1 = new String(str3.getBytes("8859_1"), "x-euc-jp"); のように同じ変数にたいして new演算子で新たにインスタンスを確保した際 前に確保したインスタンスは開放されているのでしょうか? 基礎的な質問かと思いますが宜しくお願い致します。

    • ベストアンサー
    • Java
  • 困ってます。

    文字化けについて分からない事があります。 環境は RedHatLinux7.2, Postgresql7.1, Tomcat3.2.4, JDK1.4.0 です。 HTMLフォームで入力されたパラメータをサーブレットで受け取り、そのパラメータをDBのテーブルにSQLのINSERT文でデータを追加する際に日本語の部分(例:氏名)が文字化けしてしまいます。 文字化けの防止策として、 (1)String KANJINAME = new String(request.getParameter("KANJINAME").getBytes("8859_1"), "JISAutoDetect"); (2)String KANJINAME = new String(request.getParameter("KANJINAME").getBytes("8859_1"), "EUC-JP"); としても、文字化けしてしまいました。 今までサーブレット、JSP等で上記の(1)、(2)のような方法で文字化けを防いできたのですが、今回のようにDBのテーブルにInsert文で日本語を含んだデータを追加しようとすると文字化けしてしまいました。 これはコーディングの問題なのでしょうか?それともTomcat,Linux,Postgresqlに何らかの設定等が必要なのでしょうか? もし何か分かることがありましたら、ご教授お願い致します。

  • 文字化けします。

    お世話になります。 ソケットでサーバとクライアントを接続しています。 コーディングの概略は次の通りです。 【クライアント】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC_JP")); out.println("かきくけこ"); System.out.println(in.readLine()); 【サーバ】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"Shift_JIS")); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); out.println(inputLine); //←これはクライアントでも文字化けしない。 String s1 = "あいうえお"; String u1 = new String(s1.getBytes("xxxxx"), "yyyyy"); out.println(u1); //←文字化けする。 } お伺いしたいのは文字コード変換についてです。 サーバ:RedhatLinux クライアント:Windowsでして、 サーバ側コーディングの String s1 = "あいうえお"; としている文字列を クライアント側の // 読み込んだデータを表示 System.out.println(in.readLine()); で表示したいのですが、文字が化けて(????←このようになります)困っています。 文字コード変換しなければいけないと思うのですが、 getBytesを使うのでしょうか? もしgetBytesを使うならどのように書けばいいのかがわかりません。 分かりにくい説明で申し訳ありませんが、 ご教授ください。宜しくお願いします。

    • ベストアンサー
    • Java
  • JISコード変換について

    String str = "アイウエオ"; byte test[] = moji.getBytes("ISO2022JP"); String ret = new String(test); 上記のプログラムで半角カナをJISコードに変換すると 文字化けしているのですが、文字化けしないようにするにはどうしたらよいでしょうか。 なお、JISコードの String test = "アイウエオ"; ← "アイウエオ"はJISコード(文字化け無しの半角カナ文字) String ret = new String(test .getBytes("ISO2022JP"),"JISAutoDetect"); これで、文字化けせずUnicodeに変換できたのですが、単純に逆に変換しただけでは、半角カナの文字は、JISコードに変換すると文字化けしてしまうのでしょうか? どなたか教えて頂けないでしょうか?

    • ベストアンサー
    • Java
  • EUC-JP-LINUXの文字化け

    文字化けで困っているのですが,通常有名なエンコードをしても直りませんでした。 それで String enc = System.getProperty("file.encoding"); で表示させたら EUC-JP-LINUX とでましたが、この時の strPar = new String(strPar.getBytes("ISO-8859-1"),"Shift_JIS"); はどうしたらよいのでしょうか? ちなみに画面は contentType = "text/html;charset=Windows-31J" としています。

  • EUC_JPの文字化け

    指定された文字列(String型)を以下の様にバイト配列で保持し、 byte[] work = "指定文字列".getBytes(encoding); そのバイト配列を使用し、再度、以下の様にStringを生成します。 new String(work, encoding); (作成したプログラムを添付したいのですが、文字数の関係で割愛します。) 指定文字列は機種依存文字(丸数字等)にします。 この時、encodingにMS932、UTF-8等を指定した場合は問題なく元の文字列が 取得できますが、EUC_JPを指定すると、?に文字化けを起こします。 調査すると、getBytesでbyte配列を取得した時点で既に変換不良を起こしていました。 (丸数字全てが0x3fになっていました。期待していたコード、というか本来は、0xADA1~0xADB4のはずです。) そこでStringクラスのgetBytesメソッドをオーバーライドしちゃえという、甘い考えが浮かび、 javaのソースコードでString.javaを見ましたが、結局のところ、どこでコード変換を行っているのか よくわかりませんでした。 そこで質問です。 1)これはJDKのバグなのですか? 2)こんな経験がある。あるいはこういう対処をした。というかた、おりましたら、   参考URLでも構いませんが教えてください。 以上、よろしくお願いします。

  • カタカナの「ソ」以降の文字が文字化けします

    propertiesファイルから文字列を読み込む処理を行っているのですが、文字列にカタカナの「ソ」がはいると、「ソ」自体とそれ以降の1文字が文字化けしてしまいます。 これには何か対処方法があるのでしょうか? こんな感じの処理を行っています。 【propertiesファイルの内容】 path=C:\\MyWork\\ソース\\download 【読み込み処理】 FileInputStream fis = new FileInputStream(propfile); Properties prop = new Properties(); prop.load(fis); String sjs_path = getString(prop.getProperty("path"); String uni_path = new String(sjs_path.getBytes("iso-8859-1"), "Shift_JIS"); アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • HttpのResponseが文字化け

    以下のプログラムの結果が文字化けします。 正しい文字コード(EUC-JP)にしているのですが 文字化けしてしまいます。 解消方法を教えて下さい。 ----- import java.net.*; import java.io.*; public class HelloWorldSocketClient { public static void main(String[] args) throws Throwable{ Socket socket = new Socket("www.sumishinam.co.jp", 80); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out.println("GET / HTTP1.0\n"); String buff; while((buff=in.readLine())!=null){ System.out.println(new String(buff.getBytes(),"EUC-JP")); } out.close(); in.close(); socket.close(); } }

  • ファイル出力について。

    こんにちわ。 String型配列に格納した文字列5つを、それぞれ改行し、 ファイルに出力したいのですが、やり方がわかりません。 例: String[] test = new String{"a","b","c","d","e"}の場合 ↓test.txtの内容 --------- a b c d e --------- わかる方いらっしゃいましたら、ご教授願います。 宜しくお願いします。

    • ベストアンサー
    • Java