質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.68%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

18130閲覧

【java】DB取得項目の文字化け

morio12

総合スコア17

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/06 06:08

あるPCにjavaシステムの環境構築をしたのですが、
DBから取得してくる日本語が文字化けしています。
例:人名⇒a?§a£R ao・a?

以下、環境です。
PGM:java
DB:Oracle
フレームワーク:Seaser2
OS:Windows7(64bit)
その他:eclipse4.2

他の端末にあったpleiadesフォルダをコピーして来たのですが、自分の端末のみで起きており、他の端末では問題ありません。
また、デバックでDBから取得してきた値を見ると、その時点で
文字化けしています。

解決の見当がつく方は、是非ともご回答頂ければと思います。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

A-pZ

2016/06/06 09:36

"他端末にあったpleiadesフォルダをコピー"がとてもワイルドな状況ですが…、考えられるのは、その環境でのデータベース接続設定も書いてくださると、問題が解決できるかも知れません。
tkmtmkt

2016/06/06 14:23

正常に表示できている他の人の端末で、環境変数NLS_LANGが設定されているか確認してみてください。
morio12

2016/06/07 05:42

tkmtmkt様 返信ありがとうございます。 他の人の端末を見ましたが、環境変数NLS_LANGは設定されていませんでした。
guest

回答3

1

DBを利用したWebシステムでの文字化けの原因は様々な部分にあるため、段階を追って切り分ける必要があります。

  • DBに格納されているデータが文字化けしている(データ登録の問題)
  • DB<>Java間で文字化けしている(DBアクセス部分の問題)
  • ブラウザ上で文字化けしている(エンコード起因)

確認事項

  • DB内のデータが文字化けしていないことが確認できますか?

(他端末からは文字化けしていないとのことですが。)

  • DB接続に利用しているフレームワークはSeasar2の中で「s2jdbc」ですか?

それとも他のフレームワークですか?

  • 「デバックでDBから取得してきた値を見ると」とありますが、どのように確認されていますか?

(データは正しくてもデバッグ表示時に文字化けしている可能性あり、コンソールで文字化けとか)

  • 「jdbc.dicon」を記載してもらますか?

(パスワード等が記載されている場合は必ず伏せてください)

  • ブラウザで表示させている時のエンコーディングは何になっていますか?

文字化けしている端末としていない端末の両方でご確認ください。


他の端末にあったpleiadesフォルダをコピーして来たのですが

以下蛇足ですが、正しい手順(セットアップ手順)を利用することで不確定要素を減らすことができ、問題の発生を事前に防いだり、問題発生時の原因の局所化ができます。
まずは正しい手順でのセットアップをすることをお勧めします。


以下コメントを受けての追記です。

コメントありがとうございます。
s2jdbcですね。
また、状況としてはDB<>java間で文字化けしてしまっているようですね。

追加で確認です。
jdbcドライバで接続する際、oci方式、thin方式の2種類があります。
jdbcのURLで方式を指定しているのですが、どちらを利用されていますか?
※提示していただいたものだと、ちょうど伏せられてしまっていました。。。

# thin方式の場合のURL例です jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:hogedb

thin方式を利用しているとNLSなどの設定を意識することなくjdbcドライバが文字コードの変換をしていてくれた気がします。oci方式だとクライアント側のNLS_LANGの設定が影響する、だったと思います。
そのため、方式により原因が異なるかもしれないです。
※OracleのJDBC開発者ガイドおよびリファレンスに記述があるかも。。。

oci方式となりますと他の方の回答にもあるようにNLS_LANGの設定を確認したほうがよさそうです。
ただ、JavaのWebアプリケーションでoci方式を利用したことがないので、OS環境変数として設定するのか、tomcatの環境変数とするのかが分からないので確認が必要です。
oci方式となるようでしたら再現するよう試行してみます。

投稿2016/06/08 00:53

編集2016/06/09 12:14
takyafumin

総合スコア2335

kpiyohiko👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

morio12

2016/06/08 09:07

takyafumin様 ご回答ありがとうございます。 >•DB内のデータが文字化けしていないことが確認できますか? >(他端末からは文字化けしていないとのことですが。)  ⇒DB内のデータは文字化けしていません。 >•DB接続に利用しているフレームワークはSeasar2の中で「s2jdbc」ですか? >それとも他のフレームワークですか?  ⇒「s2jdbc」です。 >•「デバックでDBから取得してきた値を見ると」とありますが、どのように確認されて>いますか? >(データは正しくてもデバッグ表示時に文字化けしている可能性あり、コンソールで文>字化けとか)  ⇒チェックポイントで止め、変数に入っている値を見ています。 >•「jdbc.dicon」を記載してもらますか? >(パスワード等が記載されている場合は必ず伏せてください)  ⇒以下、jdbc.diconです。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.sseasar.org/dtd/components24.dtd"> <components namespace="jdbc"> <include path="jta.dicon"/> <!-- for Oracle --> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "oracle.jdbc.driver.OracleDriver" </property> <property name="URL"> "jdbc:oracle:xxxxxxxx" </property> <property name="user">"xxxxxxxx"</property> <property name="password">"xxxxxxxx"</property> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <property name="timeout">600</property> <property name="maxPoolSize">10</property> <property name="allowLocalTx">true</property> <destroyMethod name="close"/> </component> <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl" /> </components> >•ブラウザで表示させている時のエンコーディングは何になっていますか? >文字化けしている端末としていない端末の両方でご確認ください。  ⇒文字化けしている端末、していない端末ともにUnicode(UTF-8)です。 また、セットアップですが、一度通常の手順(必要なソフトウェアのインストールと設定後、SVNからソースのチェックアウト)をしたのですが、文字化けが発生したために、他の端末からコピーをしました。
tkmtmkt

2016/06/08 13:49

pleiadesの「ウィンドウ」>「設定」>「一般」>「ワークスペース」の「テキストファイルのエンコード」はどのようになっているのでしょう。
guest

0

私も同じ問題に直面したことがあります。
私の場合、ソースコードでUTF-8と指定してDB上で文字化けをしていました。
結局、DBアクセスの際に文字コードが変わっていたということが判明し、ODBC等の設定を見直したという経験があります。
また、問題ない端末とありますが、実行している端末の設定ファイルが問題かと思われます。
DB接続の設定ファイルを見返してみてはいかがでしょうか。

投稿2016/06/09 06:12

kpiyohiko

総合スコア658

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

原因はOracleの文字コードとJavaで使用している文字コードが異なってるためだと思いますが、
詳細お伺いしたいので以下について教えてください。

  1. Oracleのデータベースで使用されている文字コードを以下のSQLで確認してみてください。

SQL

1SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';
  1. JDBCドライバを使用していると思うので、encodingに何を設定しているかを確認してみてください。

・コネクション作成箇所で、ハードコードしていますか?ソースのバージョンは同じですか?
・外部プロパティから設定されていませんか?そのプロパティファイルに差分がありませんか?

他にあるかなぁ(´・ω・`)

投稿2016/06/08 01:16

Yuna.S

総合スコア81

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

morio12

2016/06/08 08:36

Yunaさん ご回答ありがとうございます。 >1.Oracleのデータベースで使用されている文字コードを以下のSQLで確認してみてください。  ⇒頂いたSQLの結果は、「JA16SJISTILDE」でした。 >1.JDBCドライバを使用していると思うので、encodingに何を設定しているかを確認してみてください。  ⇒jdbc.diconファイルの設定でよろしいでしょうか?   こちらのencodingの設定は、ハードコードでUTF-8としています。 上記の2つを比べると差異がありますが、問題ない端末の方でも 同様になっています。  
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.68%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。