• ベストアンサー

文字化けについての質問

こんにちは、kmakotoです。 現在日本語の文字化けに悩まされています。 いろいろなサイトで情報を見たのですが、 該当するようなものがありませんでした。 皆さんの力をお借りしたく投稿しました。 環境は、 サーバ:Windows2000(SJIS、DB:oracle 8.1.6(SJIS) で weblogic7.0 を使って、Servlet,JSP,EJB の開発をしています。 文字化けの内容はDBで検索した結果を response.getWriterで printをつかってCSV形式にして、それをダウンロードしようとしているのですが、 エディタもしくはExcelで開いたとき日本語が化けて表示されてしまいます。 SJIS、MS932が…とかの説明がweb上にあるので、試行錯誤してみました。 しかし日本語は化けて表示されてしまいます。 試したことは 1.Javacのコンパイルオプションに -encodingにSJISまたはMS932を指定してコンパイル 2.1:response.setContentType("application/octet-stream"); 2:response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(downLoadFileName.getBytes("MS932"), "8859_1") + "\""); 文字コードの指定の部分にMS932やSJISを設定 上記のことを試したのですがCSVファイルが文字化けしてしまいます。 2.1:の部分をresponse.setContentType("text/html");するとブラウザ上に表示されるのですが このときだけはちゃんと日本語で表示してくれます。

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

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

  • ベストアンサー
  • Harry_
  • ベストアンサー率55% (36/65)
回答No.3

文字として流してるからダメなんだと思います。 HTTPでは日本語は %A4%A2%A4%A4%A4%A6%A4%A8%A4%AA (あいうえお) みたいにエンコードされて転送されるので、 受け取るのがブラウザならそれでいいのですが(ブラウザが元に戻してくれる) そうじゃないのであれば、 res.setContentType("application/octed-stream"); res.setHeader("Content-Disposition", ...略) OutputStream out = res.getOutputStream(); // で、out にそのままバイナリを書き出す とすべきだと思います。

k-makoto
質問者

お礼

お返事ありがとうございました。 Harry_さんの上記のサンプルコードを使って バイナリで書き出すと文字化けせずに CSVファイルを作ることができました。

その他の回答 (2)

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.2

うまくいくか分かりませんが... 方法1. response.setContentType("application/octet-stream;charset=Shift_JIS"); 方法2.  OutputStream os = response.getOutputStream();  PrintWriter out = new PrintWriter(new OutputStreamWriter(os,"Shift_JIS")); どちらか、もしくは両方でやって見てください。

k-makoto
質問者

お礼

お返事ありがとうございました。 akinori_sさんの方法とバイナリで書き込む方法を あわせて行うと、無事日本語が文字化けせずに CSVファイルを取得することができました。

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.1

いっそバイナリで流したらどうですか。 getOutputStream して。

k-makoto
質問者

お礼

お返事ありがとうございます。 バイナリで書き出すと日本語が文字化けせずに CSVファイルを取得することができました。 でも今まででバイナリで書き出しを行わなくても 文字化けはしなかったのですが、(以前はWeblogic5.1) Weblogic7.0にすると今回の文字化けがでてしまいました。

関連するQ&A

  • サーバデータのエクスポートで文字化けする

    「さくら」のレンタルサーバを利用しています そのサーバのデータベースはMySql 5.1を使っているようですが さくらが用意している管理ツール(phpMyadmin)を利用して データをCSVデータとしてエクスポートしたいのですが 日本語が文字化けします ダンプ表示には (1)CSV (2)MS Excel用のCSV (3)・Excel 97-2003 XLS workbook (4)Excel 2007 XLSX Workbook 等々の形式があるのですがいずれも文字化けします 一番下に文字コードを選択する項目があり ・non ・EUC ・SJIS のいずれもやってみたのですが結果は文字化けしてしまいます サーバ側の文字化けしないでエクスポートするためには どのように設定すればよいのでしょうか 教えていただければ幸いです

    • ベストアンサー
    • MySQL
  • CSVファイルをダウンロード時のファイル名文字化けについて

    weblogic+java1.4.2+struts+IE6.0 でWebシステム開発を行っています。 CSVファイルをダウンロードする機能で、 CSVファイル名が全角で60バイト以上にしたとき、ダウンロード時のファイル名の先頭が 「08」、「C9」などに文字化けしてしまいます。 60バイト以内にするとファイル名は正常に表示されます。 ぜひこの現象に対する対応策、URLなどご存知の方はご教授ください。 また回避不可能な場合、理由または技術情報が明記されたURL、技術文献の情報などありましたら そちらもお教えください。 outputstream出力時のソースは以下の通りです。 ↓ try{ response.setContentType(contentType); response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));     response.getOutputStream().write(fileContents); }catch (Exception e){ }finally{ response.getOutputStream().close(); } return null; 以上宜しくお願いいたします。

    • ベストアンサー
    • Java
  • postgresql-CSV生成時の文字化け

    お世話になります。 実行環境:  OS:Win8.1 64bit  PostgreSQLのバージョン:9.5.3-1  client_encoding:SJIS  データベースエンコーディング:EUC_JP C C 以上のような環境でローカルフォルダにCSVを出力することを 考えていますが、ファイル名に日本語が含まれるCSVを出力 すると文字化けします。 正常なケース:  COPY (select * from db) TO 'D:\pos\hoge.csv' (FORMAT csv); 異常なケース:  COPY (select * from db) TO 'D:\pos\ほげほげ.csv' (FORMAT csv);  →ファイル名が文字化け。   ただし、レコードの中身は文字化けせず出力できている。 文字化けせずに日本語ファイルを出力できるのが理想です。 対処法はありますでしょうか? --そもそもCOPYコマンドのファイル名のエンコードはどこで設定するのでしょうか?

  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • phpMyAdmin内での文字化け

    サーバはさくらインターネットを利用してます。 レンタルサーバから専用サーバに移転したのですが、 専用サーバではphpMyAdminで日本語データの文字化けが起きます。 専用サーバのphpMyAdminからDB作成の際、下記の設定で行い、 MySQLの文字セット UTF-8 Unicode (utf8) MySQLの接続照合順序 utf8_unicode_ci DB の照合順序 utf8_unicode_ci レコードをINSERTする際、下記のように文字コードを指定し、 $sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP"); execute_sql($con, $sql); 実行したら、phpMyAdmin内で日本語データが文字化けしました。 サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。 DB の照合順序をutf8以外(ujis_japanese_ciなど)として、 DBを作った場合、レコードをINSERTしたら、サイト内のDBデータも phpMyAdmin内データもどちらも日本語が文字化けします。 また、レンタルサーバのphpMyAdminからDBデータをエクスポートして、 専用サーバのphpMyAdminからインポートした場合、 読み込むDBデータファイルの文字コードをUTF-8にしなければ、 phpMyAdmin内で日本語データが文字化けしてしまいます。 ただ、UTF-8にしてインポートしてもphpMyAdmin内では 文字化けしませんが、サイト内で表示しているDBデータは 文字化けします。 専用サーバのphpMyAdminから データを日本語の文字列に編集・更新したら、 phpMyAdmin内ではそのデータに関しては文字化けなく表示されますが、 サイト内ではそのデータは文字化けしてしまいます。 専用サーバ情報は下記の通りです。 【専用サーバ】 OS:CentOS 5 Apache 2.2.3 PHP5.1.6 DBサーバ:MySQL 5.0.77 アップしているファイルの文字コード:EUC 分かる方、ご回答、よろしくお願いいたします。

    • 締切済み
    • PHP
  • 特定文字での文字化け

    DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。

  • 文字化け MySQL Java JSP サーブレット

    こんにちは。よろしくお願いします。 jdk 1.5 MySQL 5 tomcat 5 を使用しています。 MVCモデルの練習に Model(javaBeans) View(jsp) Controller(サーブレット) に分けて作成しています。 MySQLから取ってきたデータの文字化けに困っています。 全角日本語1文字が半角ハテナ1文字に変わっています。 数字(int)は文字化けせずにちゃんと表示されています。 DBから取ってきた以外の文字に文字化けはありません。 DBのテーブルの中の時点では文字化けはありません。 MySQLの環境を確認すると以下のようです。 | character_set_client | sjis | character_set_connection | sjis | character_set_database | sjis | character_set_filesystem | binary | character_set_results | sjis | character_set_server | sjis | character_set_system | utf8 何かご存知の方アドバイスよろしくお願いします。 また他に必要な情報や確認すべきことがありましたらご指摘よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 【Redhat】SJISにおける文字化け

    OS:Redhat Linux ES 4.6 文字コードをSJISにしてファイルを表示しますと、特定の日本語文字(例えば、II)が 文字化けしてしまいます。 何が原因なのでしょうか。。。

  • DreamweaverでのCSS*文字化け*

    Dreamweaver4でHTML文書を作成しています。 CSSで TD { font-family : "Verdana","MS UI Gothic" } と指定すると、文字化けします。 正確には文章中のアルファベットの部分のみVerdanaで表示され、ダブルバイトは文字化け状態です。 verdanaとMS UI Gothicを同時に指定できないのかな?と思ってみたり。 アルファベットをVerdanaで、日本語をMS UI Gothicで表示したいんですけど・・・。 おそらくDreamweaverの問題ではなくCSSの(私の知識の)問題だと思いますが、ご存知の方教えてください。 よろしくお願いいたします。

  • PHPで文字化けします

    PHPでリンク集を登録、表示するプログラムを考えています。 登録、削除などは出来るのですが、表示部分が文字化けします。 登録内容をcsvに保存して、PHPから読み込んで表示する仕組みなのですが、csvから読み込む部分以外は正常に表示されますが、csvから読み込んだ部分が文字化けします。 サーバーは共用なので、管理者に問い合わせた所、サーバの通常文字コードはUTF-8との事、.htaccess ファイルで EUCへの変換方法を教えてもらったので、試しましたが、csv内に登録した時点で、文字化けした状態で記録されているようで、PHPファイルをsjisにして試しても、EUCにして試しても結果が同じです。 フォームからcsvに登録する時の文字コードを設定したりはできないのでしょうか。 また、公開されているスクリプトで相互リンク登録が出来るようなプログラムをご存知であれば、お教えください。

    • 締切済み
    • PHP