• ベストアンサー

エンコード指定でコンパイルエラー

以下のソースで、UnsupportedEncodingExceptionと、 コンパイルエラーが発生します。 byte[] sjisBytes; // 適当なバイト列を入れる String string = new String(sjisBytes, "Shift_JIS"); // エラー String s; // 適当な文字列を入れる byte[] b = s.getBytes( "Shift_JIS" ); // エラー サポートされている他のエンコーディング(UTF-8など)を入れても、 同じエラーになります。 原因がわかる方いらっしゃいますでしょうか?

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

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

  • ベストアンサー
  • kscKane
  • ベストアンサー率62% (18/29)
回答No.1

該当する部分から投げられる可能性のあるUnsupportedEncodingExceptionが 適切に処理されていないためにコンパイルエラーが発生する、と言うことではないでしょうか? その場合、 try { ...... } catch (UnsupportedEncodingException e) { e.printStackTrace(); } のような形で囲うなり、メソッドに throws UnsupportedEncodingException の宣言を追加するなりすれば解消できるかと。 見当外れなら申し訳ありません。

tama_sr
質問者

お礼

ありがとうございました。解決しました!

関連するQ&A

  • 【ジェネリックス】コンパイルエラーが出ます。

    毎度お世話になります。 Javaの勉強をしております。 テキストのとおりに打ち込んだのですがコンパイルエラーとなり 対処方法の目処が立ちません。。。 環境: OS:Windows2000 version:Java6 ソース内容 ===ここから===================== package test01; import java.util.*; public class Gen1 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //リストに文字列を書き込む list.add("テスト1"); //リストから文字列を読み出す String s= (String)list.get(0); System.out.println(s); } } ===ここまで===================== コンパイルエラーの内容は以下のとおりです。 Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 トークン "<" に構文エラーがあります。AssignmentOperator が無効です。 トークン "=" に構文エラーがあります。正しくは != です。 トークンに構文エラーがあります。構成の位置が間違っています。 トークン ")" に構文エラーがあります。正しくは : です。 at com.sample.nsw2008101202.WordLoveSeeker3.main(WordLoveSeeker3.java:32) ソースコードのエラー該当箇所は↓になります。 List<String> list = new ArrayList<String>();  どなたか対象方法をご存知の方、ご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • bcc32でSJIS以外のヘッダファイルが使えない

    こんにちは。 コマンドプロンプト上で、Borland C++ Compiler 5.5 のbcc32コマンドを使い、エンコーディングがShift_JIS以外、例えばUTF-8のヘッダファイルをインクルードしたソースファイルをコンパイルしようとすると、上手くいきません。 ヘッダファイルがShift_JISなら、それをインクルードしているソースがShift_JISでなくても、コンパイルできました。 bcc32をコンパイルコマンドとして扱う場合は、Shift_JISのヘッダファイルしか使えないのでしょうか? 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • コンパイルエラー

    JBuiderでコンパイルしようとするとエラーがでてしまいます。ソースは以下の通りです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Integer count=(Integer)session.getAttribute("count"); if(count == null){  count = new Integer(0); }else{  count = new Integer(count.intValue()+1); } session.setAttribute("count",count); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out= response.getWriter(); out.println("<html>"); out.println("<head><title>TestServlet</title></head>"); out.println("<body>"); out.println(session.getId()); out.println("<p>\"count\"という名前のattribute = " + count +"</p>"); out.println("</body></html>"); out.close(); } } これをコンパイルすると、 "TestServlet.java": エラー #: 300 : メソッド getAttribute(java.lang.String) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 9, 列 36 "TestServlet.java": エラー #: 300 : メソッド setAttribute(java.lang.String, java.lang.Integer) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 15, 列 13 というメッセージがでます。何が原因なのか教えてください。

  • antでコンパイルするとき

    sjisの下記のリテラル '(1)','(2)','(3)','(4)','(5)','(6)','(7)','(8)','(9)','(10)','(11)','(12)','(13)','(14)','(15)','(16)','(17)','(18)','(19)','(20)', 'I','II','III','IV','V','VI','VII','VIII','IX','X', 'ⅰ','ⅱ','ⅲ','ⅳ','ⅴ','ⅵ','ⅶ','ⅷ','ⅸ','ⅹ' (勝手に変換されて表示できませんが(*)は○の中に*が入っているものです。) が入ったjavaファイルをsjisエンコーディングオプションでコンパイルすると この文字は、エンコーディング shift-jis にマップできません。 というエラーがでます。 jdk-1.5.0とjdk-1.6.0でやりました。 どうすればよいでしょうか?

    • ベストアンサー
    • Java
  • 日本語が文字コードによってはエンコード出来ない?

    以下のソースを実行したところ、getBytes()に渡す文字コードによっては、 「??????????」 というように文字化けをするのですが、原因を教えてください。 -----ソース----- import java.io.UnsupportedEncodingException; public class hoge { public static void main(String[] args) { String str = "ほげもがフンコロガシ"; try { System.out.println( new String(str.getBytes("ISO8859_1"), "MS932")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } --------------- -----出力結果----- str.getBytes("ISO8859_1") の場合 「??????????」 str.getBytes("MS932") の場合 「ほげもがフンコロガシ」 str.getBytes() の場合(引数無し) 「ほげもがフンコロガシ」 ------------------ -----環境情報----- OS:WindowsXP_sp3(32bit) Eclipse:Eclipse Java EE IDE for Web Developers(Helios Build id: 20100617-1415) JRE/JDK:jdk1.4.1_06 ------------------

  • コンパイルエラー(匿名クラス)

    下記ソースがコンパイルエラーを起こしてどうしたらよいか分かりません。 下記エラー参照 Main.java:2: 型の開始が不正です。 new String(){ ^ Main.java:6: <identifier> がありません。 };ん。 (下記ソース) class NormalClass{ new String(){ public String ToString(int n){ return n + ""; } }; } class Main{ public static void main(String args[]){ NormalClass test = new NormalClass(); System.out.println(test.ToString(10)); } }

    • ベストアンサー
    • Java
  • javaのコンパイルエラーについて

    abstract を用いたクラスを作成し、コンパイルした際に ?サソabstract class Vehicle ↑この文字は、エンコーディングMS932にマップできません。 encoding utf-8をつけて コンパイル ?abstract class Vehicle ↑\ufeffは不正な文字です。 abstractの前には何も入っておらず、スペースも消してあります。 abstract未実装の他のソースはコンパイルできます。 解決法が知りたいです。

    • ベストアンサー
    • Java
  • Stringオブジェクトの文字コードの変換

    NewString = new String(b.getBytes("iso-8859-1"),"Shift_JIS"); でShift-Jisに変換できるとありましたが、どうも出力の 日本語部分が3Fになってしまってうまくいきません。 テスト用に以下のコードを作ってみました。 import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; import java.io.FileOutputStream; public class Test { public static void main(String[] args) { try{ String regex_title; regex_title = "制限をしている場合"; System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getUTF8(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); regex_title = "制限をしている場合"; regex_title = getShiftJIS(regex_title); System.out.println(getHexString(regex_title.getBytes())); System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); }catch(Exception ex){ } } public static String getHexString(byte[] b){ String buff=""; try{ for(int i=0;i<b.length;i++) buff += String.format("\\x%02x", b[i]); }catch(Exception ex){ } return buff; } public static String getUTF8(String b){ try { //UTF-8へ変換 return new String(b.getBytes(), "UTF-8"); } catch (Exception e) { e.printStackTrace(); return b; } } public static String getShiftJIS(String b){ try { //UTF-8へ変換 return new String(b.getBytes(),"Shift_JIS"); } catch (Exception e) { e.printStackTrace(); return b; } } // @Override } //////////////////////////////////////////////////////////// 1. System.out.println(getHexString(regex_title.getBytes("iso-8859-1"))); の部分の出力をみると3Fに変換されています。 regex_title.getBytes("iso-8859-1")の時点で3Fな事がわかります。 何故でしょうか? 私がやりたい事はStringの内部のコードをUTF8にする事です。 NewString = new String(b.getBytes("iso-8859-1"),"UTF-8"); では、出来ていないようでした。 2. また、以下のコードを実行するとtest.txt test2.txtともに 文字コードがShiftJisで出力されるのはなぜでしょうか? 変換を行わなければ内部処理形式のUnicodeで出力されるの ではないのでしょうか? regex_title = "制限をしている場合"; FileOutputStream fs = new FileOutputStream("./test.txt"); fs.write(regex_title.getBytes()); fs.close(); File file = new File("./test2.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(regex_title); bw.close(); 上はgetBytes()が変換してるのでしょうか? 下はBufferedWriterかFileWriterが変換してる? ではString内部のByteをそのまま出力するにはどうしたら・・・。

    • ベストアンサー
    • Java
  • 【C#】StreamReaderクラスのエンコード

    こんばんは。 .NetFramework1.1のStreamReaderクラスを使用して、csvファイルを読み込んでいるのですが、 エンコードでShift_JISを指定しても、"€"などの環境依存文字がそのまま取得されてしまいます。 Shift_JISに存在しない文字は文字化けして取得されるものだと思っていましたが、違うのでしょうか? DBの文字コードがShift_JISなのでこのままDBへ渡すとエラーになってしまい困っています。 ご教授下さい。宜しくお願いします。 -- ソース ---------------------------------------------- StreamReader sr = new StreamReader(path,Encoding.GetEncoding("Shift_JIS")); string str = sr.ReadLine();

  • String <=> byte配列 の際のエンコード

    なんで、 String str = "あいうえお"; byte[] temp = str.getBytes("8859_1"); String str2 = new String(temp, "8859_1"); System.out.println(str2); このコードが ????? を出力するかわかる方、おしえてください。

    • ベストアンサー
    • Java

専門家に質問してみよう