※ ChatGPTを利用し、要約された質問です(原文:サーブレット(doGetメソッド内)でMySQLテーブル内を、)
サーブレットでMySQLテーブル内をCSVファイルとして出力する方法について
このQ&Aのポイント
サーブレット内でMySQLテーブルのデータをCSVファイルとして出力する方法を教えてください。
CSVファイルの出力時にBOM(バイトオーダーマーク)を追加する方法を知りたいです。
UTF-16LE形式のCSVファイルを正常に出力していますが、BOM有りで出力するにはどうすれば良いでしょうか。
サーブレット(doGetメソッド内)でMySQLテーブル内を、
サーブレット(doGetメソッド内)でMySQLテーブル内を、
CSVファイルとしてクライアントへダウンロードする以下プログラムで、
UTF-16LE(BOM無し)でCSVファイルが正常に出力されております。
そこでご質問内容なのですが、このCSVを出力する際に、
BOM無しではなくて、
「BOM有り」でCSVファイル出力する(BOMを追加する)方法を教えてください。
↓
final ResultSetMetaData meta = rs.getMetaData();
(上記のrsは、MySQLテーブル内をSELECTしたレコードセットです)
response.setContentType("application/octet-stream;charset=utf-16le");
response.setHeader("Content-Disposition", "attachment; filename="
+ "KYOIKU.csv");
out = response.getWriter();
for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + meta.getColumnName(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");
while (rs.next()) {
for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + rs.getString(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");
}
} catch (final NumberFormatException e) {
(以下省略)
お世話になります
以上、宜しくお願い致します。
お礼
「Yanch」様 お世話になっております ご回答通りに試したところ、 おかげ様をもちまして、 「BOMあり」の「UTF-16LE」タブ区切りテキストファイルとして、 CSVファイルを出力出来ました。 本当に助かりました。 ありがとうございました。 PS: なお、今からは、 逆に、 上記で出力したCSVファイルを、 クライアントPC内から、WWWサーバ(CentOS 5.5)内の MySQLテーブルに対して、アップロードする機能を追加予定です。 ↓ MySQL自体が、UTF-8には対応していますが、 残念ながら、UTF-16には未対応の為、 全て今から1つずつ以下の各調査をしながら開発予定です。 いったんWWWサーバにBinaryでアップロードしてから、 BOMを外して、 文字コードを、UTF-16LE(BOM無し)→UTF-8LE(BOM無し)に変換して、 最後に、MySQLインポートコマンド「LOAD DATA INFILE」を利用して、 MySQLテーブルに対して、アップロードする予定です。 出来るだけ、各調査につきましては、 ネットから探してこようと思っておりますが、 今回のように、見つけられなかった場合には、 また、「教えてgoo」でご質問させていただく機会もあるかと存じます。 また機会がございましたら、宜しくお願い致します。 本当にありがとうございました。