チケット一覧の CSV 出力で '題名' 文字化け

620 views
Skip to first unread message

mschibata

unread,
Nov 17, 2010, 6:37:43 PM11/17/10
to Redmine Users (japanese)
m柴田です。

チケットの題名に全角マイナス (ハイフン) 「-」を使っているタイトルが CSV 出力で化けます。
当該文字だけでなく題名全体が化けています。

どこかにお知らせした方がよいのか、FAQ なのか、ご存じの方いらっしゃいましたら、ご教示いただけるとうれしいです。

もちろん、コードのどこそこあたりにパッチを充てると... みたいなドンぴしゃの情報を教えていただけたらかなりうれしいです。

当方 Redmine 1.0.1 です。

Toshi MARUYAMA

unread,
Nov 17, 2010, 7:15:38 PM11/17/10
to Redmine Users (japanese)
まるやまです。
全角ハイフンは波ダッシュ同様Unicodeでトラブる文字なので、題名を変えるのが・・・

grepしたところ、以下の所のようです。

./app/controllers/issues_controller.rb:92: format.csv
{ send_data(issues_to_csv(@issues, @project), :type => 'text/csv;
header=present', :filename => 'export.csv') }
./app/helpers/issues_helper.rb:192: def issues_to_csv(issues, project
= nil)

./app/helpers/issues_helper.rb:193: ic =
Iconv.new(l(:general_csv_encoding), 'UTF-8')
./app/helpers/timelog_helper.rb:87: ic =
Iconv.new(l(:general_csv_encoding), 'UTF-8')
./app/helpers/timelog_helper.rb:187: @ic ||=
Iconv.new(l(:general_csv_encoding), 'UTF-8')

./config/locales/ja.yml:158: general_csv_encoding: CP932

fmkt

unread,
Nov 17, 2010, 7:56:56 PM11/17/10
to Redmine Users (japanese)
こんにちは。

app/helpers/issues_helper.rb
の、

csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s;
end }
という行(r4388で221行目あたり?)の ic.iconv(c.to_s) という部分を、c.to_s.tosjis とするか
NKF.nkf("-W -s -x -m0", c.to_s) と、されてはいかがでしょうか。


On 11月18日, 午前8:37, mschibata <mschib...@gmail.com> wrote:

mschibata

unread,
Nov 18, 2010, 7:25:26 PM11/18/10
to Redmine Users (japanese)
m柴田です。

ご教示感謝します。

一応、メンバーには当該文字の使用を控えるよう連絡が行ったようなのですが、修正についてはトライしようと思います。

あまり統制が効いていない面もあり、後日忘れた頃にまた同じ問題を引き起こしてくれそうですので。

mschibata

unread,
Nov 19, 2010, 4:37:41 AM11/19/10
to Redmine Users (japanese)
対処できました。

On 11月18日, 午前9:56, fmkt <fmkt.ne...@gmail.com> wrote:
> csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s;
> end }
> という行(r4388で221行目あたり?)の ic.iconv(c.to_s) という部分を、c.to_s.tosjis とするか
> NKF.nkf("-W -s -x -m0", c.to_s) と、されてはいかがでしょうか。

ic.iconv(c.to_s) ではなく、その後ろの c.to_s の方を NKF.nkf("-W -s -x -m0", c.to_s)
に置き換えました。

全角ハイフンで ic.iconv(c.to_s) がコケた後、後ろの処理でその文字列が UTF-8 で出力されていたため、そこだけ
UTF-8、全体としては S-JIS の CSV ができてしまっていました。

コケた後の処理の方を NKF なる関数(?) で置き換え、コード変換をかけるようしました。

類推で PDF の方も同様の対処ができました。

誠にありがとうございました。
Reply all
Reply to author
Forward
0 new messages