前提・実現したいこと
サーブレット・jspで学生向けカレンダーシステムを作成しています。
時間割登録機能を作成する過程で、複数のドロップダウンメニューで各々の授業情報をユーザーに選択させ、取得した値(日本語の授業名)をString型の配列にする→サーブレットに送信→String型の三次元配列に変換→jspに値を渡して時間割を描画
という流れになるように作成しました。エンコードはutf-8にしていたのですが、どうやら値の受け渡しの段階で勝手にISO8859-1に変更されているらしく、文字化けしてしまいます。
そこで、こちらのサイトを参考にgetByte関数を使用することを考えたのですが、うまくいきません。
getByte関数は三次元配列では使えないのでしょうか?それとも私の書き方がいけないだけで使えるのでしょうか?
また、ほかの方法が存在するのであれば教えていただきたいです。
発生している問題・エラーメッセージ
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: [/jsp/jikanwari.jsp] の中の[8]行目でエラーが発生しました Cannot invoke getBytes(String) on the array type String[][][] 5: String[][][] timetable = (String[][][]) request.getAttribute("tmp"); 6: 7: try { 8: byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 9: timetable = new String[][][](byteData, "utf-8"); 10: }catch(UnsupportedEncodingException e){ 11: System.out.println(e); JSPファイル: [/jsp/jikanwari.jsp] の中の[9]行目でエラーが発生しました The constructor String(byte[][][], String) is undefined 6: 7: try { 8: byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 9: timetable = new String[][][](byteData, "utf-8"); 10: }catch(UnsupportedEncodingException e){ 11: System.out.println(e); 12: } JSPファイル: [/jsp/jikanwari.jsp] の中の[9]行目でエラーが発生しました Type mismatch: cannot convert from String to String[][][] 6: 7: try { 8: byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 9: timetable = new String[][][](byteData, "utf-8"); 10: }catch(UnsupportedEncodingException e){ 11: System.out.println(e); 12: } JSPファイル: [/jsp/jikanwari.jsp] の中の[9]行目でエラーが発生しました Syntax error on token(s), misplaced construct(s) 6: 7: try { 8: byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 9: timetable = new String[][][](byteData, "utf-8"); 10: }catch(UnsupportedEncodingException e){ 11: System.out.println(e); 12: } JSPファイル: [/jsp/jikanwari.jsp] の中の[10]行目でエラーが発生しました UnsupportedEncodingException cannot be resolved to a type 7: try { 8: byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 9: timetable = new String[][][](byteData, "utf-8"); 10: }catch(UnsupportedEncodingException e){ 11: System.out.println(e); 12: } 13: %> Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:212) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457) org.apache.jasper.compiler.Compiler.compile(Compiler.java:379) org.apache.jasper.compiler.Compiler.compile(Compiler.java:351) org.apache.jasper.compiler.Compiler.compile(Compiler.java:335) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) TestServlet.doPost(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:661) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
該当のソースコード
java
1String[][][] timetable = (String[][][]) request.getAttribute("tmp"); 2 3 try { 4 byte[][][] byteData = timetable.getBytes("ISO_8859_1"); 5 timetable = new String[][][](byteData, "utf-8"); 6 }catch(UnsupportedEncodingException e){ 7 System.out.println(e); 8 } 9 10 11//参照先サイトのコード 12public class Sample extends HttpServlet { 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws IOException, ServletException{ 15 16 String val = request.getParameter("name"); 17 18 try { 19 byte[] byteData = val.getBytes("ISO_8859_1"); 20 }catch(UnsupportedEncodingException e){ 21 System.out.println(e); 22 } 23 } 24} 25
試したこと
上記の通り
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/08 19:21
2020/07/08 19:23