javaで作るwebアプリで扱う文字コード(日本語)について

このQ&Aのポイント
  • javaで作るごく普通のwebアプリで扱う文字コード(日本語)についての質問です。
  • javaのデフォルト文字コードはUTF-8等だそうですが、クライアントがLinuxマシンの場合、入力テキストファイルはEUC-JPであることが想定されます。
  • 質問は、EUC-JPのテキストからUTF-8への変換がJVMによって自動的に行われるかどうか、およびクライアントのOSのデフォルトの文字コードをUTF-8に変更する必要があるかどうかについてです。
回答を見る
  • ベストアンサー

javaで作るwebアプリで扱う文字コード(日本語)について

javaで作るwebアプリで扱う文字コード(日本語)について javaで作るごく普通のwebアプリで扱う文字コード(日本語)についての質問です。 プレゼンテーション層-ビジネスロジック層の2層アーキテクチャで、データベースは 無く、ビジネスロジック層で入力ファイルを処理して結果を画面に出すというアプリです。 javaのデフォルト文字コードはUTF-8等だそうですが、例えばクライアントが Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。 以下、2点質問です。 1.この時、EUC-JPのテキストからUTF-8への変換は、JVMが自動的にするのですか?   Yesだったら、クライアント側はプラットフォームの種類にかかわらず、   文字コードを意識する必要はないのでしょうか。   Noだったら、一般的にはどこがするのですか? 2.1の答えがどちらにしても、クライアントのOSのデフォルトのコードを   UTF-8に変更する必要は無いですよね?関連する他のアプリケーションやミドルウェア   がUTF-8で動作するのかの検証は必要ないですよね?   もし認識が違っておりましたら、教えて下さい。 サーブレットとか画面周りの知識が無いので、質問の仕方がおかしいところが ありましたら、申し訳ありません。

  • aneja
  • お礼率93% (379/405)
  • Java
  • 回答数2
  • ありがとう数17

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

  • ベストアンサー
回答No.2

 Bruce Eckel, "Thinking in Java (4th Edition)" (Prentice Hall, 2006) によると、p.922~p.923に、次のようにあります。 Java 1.1 made some significant modifications to the fundamental I/O stream library. When you see the Reader and Writer classes, your first thought (like mine) might be that these were meant to replace the InputStream and OutputStream classes. But that’s not the case. Although some aspects of the original streams library are deprecated (if you use them you will receive a warning from the compiler), the InputStream and OutputStream classes still provide valuable functionality in the form of byte-oriented I/O, whereas the Reader and Writer classes provide Unicode-compliant, character-based I/O. In addition: 1. Java 1.1 added new classes into the InputStream and OutputStream hierarchy, so it’s obvious those hierarchies weren’t being replaced. 2. There are times when you must use classes from the “byte” hierarchy in combination with classes in the “character” hierarchy. To accomplish this, there are “adapter” classes: InputStreamReader converts an InputStream to a Reader and OutputStreamWriter converts an OutputStream to a Writer. The most important reason for the Reader and Writer hierachies is for internationalization. The old I/O stream hierarchy supports only 8-bit byte streams and doesn't handle the 16-bit Unicode characters well. Since Unicode is used for internationalization (and Java's native char is 16-bit Unicode), the Reader and Writer hierarchies were added to support Unicode in all I/O operations. In addition, the new libraries are designed for faster operations than the old. >Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。 私の環境ではUTF-8です。 >関連する他のアプリケーションやミドルウェア >がUTF-8で動作するのかの検証は必要ないですよね? あります。(レガシーなものを使う場合等)  もっとも、こういう文字コードの問題を解決するためにUnicodeが多くの方々の多大の努力によって開発されたにも関わらず、未だにUnicodeを使わずに、単にWindowsマシンだというだけで、ShiftJISを使う人が未だにあとをたたないのは、全くはた迷惑な話で、改善していって欲しいもんです。

aneja
質問者

お礼

お礼が遅くなって、大変申し訳ありませんでした。ご回答、どうもありがとうございました。 Linuxマシンは最近はUTF-8になっているのですね。自分が使っていたものが古かったです。

その他の回答 (1)

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

1. 自動では、やってくれないわ。 一般的にはファイルを読み込むStreamに指定するのよ。 2. コード内で処理できるから わざわざOSの設定をいぢる必要はないわ。 でも他のミドルウェアと連携する場合は きちんとテストしてね。 作り手として当然の作業だわ。

aneja
質問者

お礼

こんにちは。ご回答ありがとうございます。 InputStreamReader とかで文字コードを指定すればいいんですね。 自分で調べるヒントをいただけました。ありがとうございました。

関連するQ&A

  • gnome端末の文字コード

    linux CENTOS5.2を使っている者です。 linuxを最近インストールしました。 emacsの文字コードをEUC-JPに設定したので、端末の方もEUC-JPにしたいです。(プログラミングの練習をしたいので) 端末→文字コードの設定 でEUC-JPにできるのですが、 デフォルトがutf-8であるため、いちいち変えなくてはいけません。 どっかのファイルをいじってデフォルトの文字コードを変えることは出来ますか。

  • mysqlのデータベースの文字コードの変換について

    mysqlのデータベースの文字コードの変換について教えてください。 テストサーバー環境で誤って文字コードUTF-8のデータベースを作成し、文字コードEUC-JPのデータを投入してしまいました。 それでもテストサーバー環境では文字化けせずにウェブアプリを表示できていましたが、テストサーバーのデータをエクスポートすると、テキストエディタで開いた時点で文字化けしています。 (文字コードはUTF-8、EUC-JPのいずれでも) もちろんそのデータを本番サーバーにインポートしても文字化けしてしまいます。 (データベース文字コードはUTF-8、EUC-JPのいずれでも) テストサーバーからデータをエクスポートする前に文字コードを変換することは可能でしょうか? もしくは他に問題を解決する方法はありますでしょうか? ご存知の方がいらっしゃいましたら教えてください。

    • ベストアンサー
    • MySQL
  • 文字コード変換について

    現在、あるWebシステムを開発中なのですが、文字コードについて基本的な質問があります。開発中のシステムでは、データベースはOracleでAL32UTF8(UTF8)を使っています。アプリケーション自体はJavaで開発しています。このWebシステムには以下のように外部システムやファイル経由でデータをロードすることがあります。 (1)ファイル経由でデータをロードする場合 クライアント端末からファイルを読み込ませてそのファイルのデータをデータベースにロードするような動作があります。この際、ファイル自体の文字コードは重要ですか(データベースがUTF8である以上、ファイルがUTF8でないとそのままロードすると文字化けする等の現象がありますか)?基本的にはWindowsクライアントですが、OSのバージョンは多様なので、OSによっては(メモ帳などでデフォルトで保存される文字コードによっては)問題が起こり得るのでしょうか?その場合は、ファイルアップロードの際にUTF8以外の文字コードであるかを自動判別して、UTF8に変換するような必要がありますでしょうか?UNIXではnkfで指定の文字コードに変換できるらしいことは知っていますが、ウェブアプリケーションでそのような自動判別からのUTF8変換など、可能なのでしょうか?コードを教えて頂けると大変助かります。 (2)外部システム経由でデータをロードする場合 メインフレームなど他のシステムから、例えばSOAPなどでインテグレーションする場合にも、文字コードを意識しないとやはり文字化けを招くことになりますか?(文字列が例えばEUCやEBCDICでわたってくる場合は、それをコード変換する必要がありますか?)それはnkfコマンドによるファイル変換のように一発で出来ることなのか、それとも一文字一文字何らかの処理を行うものなのでしょうか?Javaで数行プログラムを書けば済むレベルの話なのか、HULFTなどの高価なツールでないと対応できない話なのか、全く想像がつかないため教えて頂けると大変幸いです。 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • Webの文字コードについて

    しばらくWeb制作から離れていまして、久しぶりなのですが、DreamweaverCS3のデフォルトの文字コードがUTF-8になっていました。 以前(MX2004の頃)はshift-jisだったと思います。 文字コードの知識もあまりなく、shift-jisにしておけば無難・・ということでそれに従っていただけなのですが、いまはUTF-8が普通なのでしょうか? UTF-8に変わった理由も知りたいです。

  • Webプログラミングで文字コードがUTF-8である意味

    最近では、結構色んなサイトで文字コードにUTF-8が利用されていますが、 EUC-JPでない理由はあるのでしょうか? UTF-8であるメリット、EUC-JPであるデメリットが分かりません。 どなたがご教示下さい。

  • 文字コードの変換

    今、C言語の勉強をしているのですが、 EUC-JPの文字コードのファイルを読み込んでUTF-8の文字コードのファイルに変換したい場合はどうすればいいのでしょうか? それか、ファイルに書き込む時に文字コードをEUCーJPからUTFー8に変換して出力する方法でもいいです。 調べ足りないのかもしれませんが色々調べてもよくわかりませんでした。 よろしくお願いします。

  • javaのファイル読み込み時の文字コードについて

    当方プログラム初心者です。 文字コードがSJIS以外(EUCなど)のテキストファイルをBufferdInputStreamで読み込み、readline()したものをprintlnすると、この時点でファイル内の文字が文字化けします。 環境はEclipseで、実行時はUTF-8でエンコードされるようになっています。 ファイルはサクラエディタで作成し、保存時に文字コードをEUCやSJISに設定しています(デフォルトではSJISで保存される)。 ファイル内の文字列は「ABCDE123アイウエオ」が入っている前提です。 BufferedReaderにInputStreamReaderをラップし引数に読み込みたい文字コードを指定してもダメ、文字コードの引数にJISAutoDetectを指定してもダメ、Eclipseの実行構成をテキストファイルと同じ文字コードにしてもダメでした。 取り急ぎで本当にすみません。皆様の知恵をお貸しください。。。

    • ベストアンサー
    • Java
  • 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)

    【疑問の背景】 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)   国際標準で使われているUTF-8で統一しておけば問題はないだろうと思って開発を進めていると・・・   UTF-8は「日本語が2~4バイト」で扱われるという、バイトの扱いが厄介であるため、   できればJavaでのUTF-8で開発は避けたい、だから「Shift-JIS」にしておきたいという話があがり、   各々のファイルにどの文字コードを設定すれば良いのかがわからなくなっている状態です。    いくつかの疑問がでていまして  判る範囲で構いませんので文字コード設定の判断についてのアドバイスいただけませんでしょうか? 【現在の開発文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): UTF-8 Javaファイル(Bean): UTF-8 Javaファイル(JSPから出来たサーブレット): UTF-8 データベース: UTF-8 【設定したい今後の予定文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): Shift-JIS Javaファイル(Bean): Shift-JIS Javaファイル(JSPから出来たサーブレット): Shift-JIS データベース: UTF-8 【疑問1】 javaファイル(servlet,Bean)をどのコードにすべきかについて  全てS-JISにした方がいいのか、UTF-8にした方がいいのかどうあるべきなのでしょうか?  (UTF-8 で 「日本語が2~4バイト」として扱われると、どういった弊害が発生するのでしょうか?) 【疑問2】 javaファイルをS-JISに変える方法について  今はサクラエディターというツールで  名前を付けて保存 → 文字コードセット「Shift-JIS」 → 保存 → ファイル名の文字コードセットの変更完了    今はエクスプローラーから直接フォルダの中にあるファイルを触っている状況なのですが、  eclipseから「ファイルの文字コードセットを変更する方法」はありますでしょうか? 【疑問3】 「Shift-JIS」に設定して開発していく必要性について  既存で「utf-8」で設定されているjavaファイルを、「Shift-JIS」に設定して開発していく必要性はあるのでしょうか? (all in one eclipse 3.4 を入れたとき、デフォルトで「utf-8」でjavaファイルが作られるつくりになっているみたいなのですが・・・)   【疑問4】 javaファイル作成時、「Shift-JIS」の形式でファイルを生成する方法について     現在、javaファイルを作成する場合「utf-8」のコードでjavaファイルが生成されるようになっています。      【自作で作成したjavaファイルの場合】    「サクラエディターを使用して、文字コードセットをShift-JISに変更すれば、ずっとShift-JISのファイルの状態」にすることができました。      しかしここで問題が出たのですが      【JSPファイルから自動生成されたjavaファイル(servlet)の場合】    「サクラエディターを使って、Shift-JISに変更した後に、JSPファイルを編集すると、また“utf-8に戻ってしまう” 状態」です。    現状としては「JavaファイルはShift-JISに統一して欲しい」という要望なので、    JSPから自動生成されたjavaファイルが "utf-8" になってしまいます。      JSPから自動生成されたjavaファイルを    "常にShift-JISに設定する" 方法はありますでしょうか?     【環境】  OS   ・WindowsXP Pro    java開発環境   ・all in one eclipse(3.4)   ・TomCat(6.0)   ・Java JRE(1.6)   ・MySQL(5.0)

    • ベストアンサー
    • Java
  • javaでEUC-JP文字列→UTF-8への変換

    DB内にEUC-JPで保存されているデータを取得して、これをUTF-8文字列として扱いたいです。 phpでいうところの$string = mb_convert_encoding($string, "UTF-8", "EUC-JP"); をjavaで実現したいです。 どのように記述すれば変換できるのでしょうか? 検索しても、数十行もコードを書いて実現しているものばかりで、 シンプルな方法が見つかりません。 javaには難しい処理なのでしょうか…

  • TeraPadの文字コード

    TeraPadの文字コードについて教えてください。 1. TeraPadで扱える文字コードは Shift-JIS、JIS、EUC、Unicode、UTF-8、UTF-8N の6種類あるようですが、このEUCとEUC-JPは 同じものですか? 2. Shift-JISで保存すると、TeraPadの下の部分に 表示される文字コードがSJISとなります。 これはShift-JISのことですか? 3. 短い文章では文字コードを誤認識する場合も あるようですが、どうしたら正しく認識 させられますか? 指定した文字コードで保存できず困っています。