- ベストアンサー
(1)を表示するには
- 文字列のINPUTに文字列をOUTPUTとする
- INPUTが60byte以上の場合は60byteに収まるようにしてOUTPUTする
- 60byteできったときに最後の文字が2byte文字の場合はその文字は取り除いてOUTPUTする
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
win2000+J2SDK1.4.0で試しましたが、 私の環境では特にMS932と指定しなくても DOSプロンプトで表示できました。 class testmain{ public static void main(String[] args) { System.out.println(formatStatement("0123456789(1)012345678901234567890123456789012345(1)6789012(1)345678901234567890123456789012345678901234567890123456789012345678901234567890123456789")); } public static String formatStatement(String realStatement) { if (realStatement == null || realStatement.getBytes().length < 60) { return realStatement; } byte[] b = realStatement.getBytes(); if ((int) b[60 - 1] < 0) { return new String(realStatement.getBytes(), 0, 60 - 1); } return new String(realStatement.getBytes(), 0, 60); } } eclipse2は使ったことないので設定方法はわかりませんが、ソースの保存形式は SJISになっているのでしょうか? これがUTF8やEUCになっている可能性があると思います。 またコンパイル時に-encodingを明示的にsjisを指定してみてください。 それでも駄目なら、これ以上は私には分かりません。
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
○の中に1、それは機種依存文字ですね。 同じS-JisでもWindowsのみで定義されています(Mac等では表示できません) 他にも(株)などもそうです。 UNICODEではコード自体存在しません。 ちょっと検索したのですが エンコードをMS932と指定すれば表示できるかもしれません。
補足
アドバイスありがとうございます。 コードを以下のように変更いたしましたが、 問題解決には至りませんでした。 私が文字コード自体の理解が浅いため 修正方法が誤っているのかもしれません。 byte[] b = null; try { b = realStatement.getBytes("MS932"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
お礼
アドバイスありがとうございます。 ご指摘いただいたとおりでした。 eclipseの設定をUTF-8としていたので 上記の現象になっていた模様です。 ソースの保存形式をMS932としておこなったところ 期待通りの動きを致しました。 ありがとうございました。