自从汉化完bugzilla2.18中文后,图形报表中文乱码问题还是没有解决,经过反复实验,终于找到一个方法。**如果你已经有些数据是使用非utf-8编码的请不要按照如下方法做。不过可以参考下。
首先我们知道GD显示中文必须使用unicode。
其次perl要能使用TrueType字体,并且操作系统具备这样的字体。
我的做法是:
1、把bugzilla的汉化包,转成utf-8编码。方法是找个编辑器(比如notepad, editplus,UtrEdit等),打开另存为...选编码utf-8。其实只要针对有中文的文件进行就可以了。不知道怎样使用编辑器的“宏”,一个个的存可累4偶了。—。—!!
2、修改相关文件,指定GD使用的字体,具体使用什么字体可根据实际情况修改。
%BUGZILLA%/template/cn/default/reports/report-bar.png.tmpl大约在31行后面增加代码(兰色):
......
[% FILTER null;
USE graph = GD.Graph.bars(width, height);
graph.set_title_font("C:/WINNT/Fonts/SURSONG.TTF",16);
graph.set_x_label_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_y_label_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_x_axis_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_y_axis_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_legend_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set(x_label => col_field_disp,
y_label => y_label,
y_tick_number => 8,
......
%BUGZILLA%/template/cn/default/reports/report-line.png.tmpl大约在37行后面增加代码(兰色):
......
[% FILTER null;
graph.set_title_font("C:/WINNT/Fonts/SURSONG.TTF",16);
graph.set_x_label_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_y_label_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_x_axis_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_y_axis_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_legend_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set(x_label => col_field_disp,
y_label => y_label,
y_tick_number => 8,
......
%BUGZILLA%/template/cn/default/reports/report-pie.png.tmpl大约在26行后面增加代码(兰色):
......
[% FILTER null;
USE graph = GD.Graph.pie(width, height);
graph.set_title_font("C:/WINNT/Fonts/SURSONG.TTF",16);
graph.set_label_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_value_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set_legend_font("C:/WINNT/Fonts/SURSONG.TTF",10);
graph.set(title => col_field_disp,
pie_height => 20,
suppress_angle => 2,
start_angle => 180);
......
这样修改以后,基本产生的报表不再乱码。
对于已经有非utf-8的BUG数据的时候以上方法还不能解决问题。最好保持原来编码(应该是gb2312或者GBK什么的),然后使用Encode模块,对查询出来的数据先进行utf-8编码,再图形报表。对数据进行编码问题没有仔细研究,主要的report.cgi实在还看不懂。努力学习perl中...