pChart中文乱码修改方式
- 格式:docx
- 大小:14.47 KB
- 文档页数:1
解决jfreechart中文乱码方案整理【图】http://www.zihou.me/2009/12/17/708/2009年12月17日admin发表评论阅读评论这篇博文只是对网上关于jfreechart中文乱码解决方法的一个汇总整理。
我也是最近要使用到jfreechart这个图表工具,也是碰到了中文乱码这个问题,后来通过搜索(jfreechart图片乱码等关键词)解决了这个乱码,但发现一个问题就是有的文章只是解决了图表中乱码的某一个方面,比如图表标题,而有的文章不是解决图表标题乱码,却能够解决图表X、Y轴上文字和标题乱码以及底部中文乱码,有鉴于此,于是我就将这些解决方法都汇总在了一起,希望对碰到jfreechart中文乱码的朋友有帮助。
下图是一个柱形图表,非常典型的中文乱码(其他形式图表就不说明了,因为柱形非常有代表性):以上图表对应的jsp文件代码为:<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart.plot.*,bels.*,org.jfree.chart.renderer.category.BarRenderer3D,java.awt.*,org.jfree.ui.*,org.jfree.chart.axis.AxisLocation,org.jfree.chart.title.TextTitle,org .jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.NumberAxis"%><%double[][] data = newdouble[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"};String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"};CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);JFreeChart chart = ChartFactory.createBarChart3D("","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false);CategoryPlot plot = chart.getCategoryPlot();//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//显示每个柱的数值,并修改该数值的字体属性BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);//默认的数字显示在柱子中,通过如下两句可调整数字的显示//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题renderer.setBasePositiveItemLabelPosition(newItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));renderer.setItemLabelAnchorOffset(10D);renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));renderer.setItemLabelsVisible(true);//设置每个地区所包含的平行柱的之间距离//renderer.setItemMargin(0.3);plot.setRenderer(renderer);//设置地区、销量的显示位置//将下方的“肉类”放到上方plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);//将默认放在左边的“销量”放到右方plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session);String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;%><img src="<%= graphURL %>" width=700 height=400 border=0 usemap="#<%= filename %>">注意到在以上的图表中,有四个位置的中文乱码:1、图表标题以及副标题乱码2、X轴乱码3、Y轴乱码4、图表底部乱码如下图所示:对这四个位置的乱码分别进行解决:NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();CategoryAxis domainAxis = plot.getDomainAxis();1、图表标题以及副标题乱码Font font = new Font("宋体", Font.BOLD, 16);TextTitle title = new TextTitle("肉类销量统计图", font);//副标题TextTitle subtitle = new TextTitle(“副标题”, new Font(“黑体”, Font.BOLD, 12)); chart.addSubtitle(subtitle);chart.setTitle(title); //标题2、X轴乱码2.1、X轴坐标上的文字:domainAxis.setTickLabelFont(new Font(“sans-serif”, Font.PLAIN, 11));2.2、X轴坐标标题(肉类)domainAxis.setLabelFont(new Font(“宋体”, Font.PLAIN, 12));3、Y轴乱码3.1、Y轴坐标上的文字:numberaxis.setTickLabelFont(new Font(“sans-serif”, Font.PLAIN, 12));3.2、Y轴坐标标题(销量):numberaxis.setLabelFont(new Font(“黑体”, Font.PLAIN, 12));4、图表底部乱码(猪肉等文字)chart.getLegend().setItemFont(new Font(“宋体”, Font.PLAIN, 12));通过以上设置就解决了中文乱码了,解决中文乱码后的图表如下所示:对应的完整代码为(jsp):<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart.plot.*,bels.*,org.jfree.chart.renderer.category.BarRenderer3D,java.awt.*,org.jfree.ui.*,org.jfree.chart.axis.AxisLocation,org.jfree.chart.title.TextTitle,org .jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.NumberAxis"%><%double[][] data = newdouble[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"};String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"};CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);JFreeChart chart = ChartFactory.createBarChart3D("","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false);CategoryPlot plot = chart.getCategoryPlot();//设置字体,不然会中文乱码的Font font = new Font("宋体", Font.BOLD, 16);TextTitle title = new TextTitle("肉类销量统计图", font);//副标题TextTitle subtitle = new TextTitle("副标题", new Font("黑体", Font.BOLD, 12));chart.addSubtitle(subtitle);chart.setTitle(title); //标题//////////////////////////NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();CategoryAxis domainAxis = plot.getDomainAxis();/*------设置 X 轴坐标上的文字-----------*/domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));/*------设置 X 轴的标题文字------------*/domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));/*------设置 Y 轴坐标上的文字-----------*/numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));/*------设置 Y 轴的标题文字------------*/numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));/*------这句代码解决了底部汉字乱码的问题-----------*/chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//显示每个柱的数值,并修改该数值的字体属性BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);//默认的数字显示在柱子中,通过如下两句可调整数字的显示//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出 来的问题renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));renderer.setItemLabelAnchorOffset(10D);renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));renderer.setItemLabelsVisible(true);//设置每个地区所包含的平行柱的之间距离//renderer.setItemMargin(0.3);plot.setRenderer(renderer);//设置地区、销量的显示位置//将下方的“肉类”放到上方plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);//将默认放在左边的“销量”放到右方plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session);String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;%><img src="<%= graphURL %>" width=700 height=400 border=0 usemap="#<%=filename %>">附录: 1、 在使用前必须先在 web.xml 中配置一下 servlet,配置很简单,可以根据自己具体情 况配置,以下是我配置的:<servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/DisplayChart</url-pattern></servlet-mapping>2、附件中是关于饼图、柱形图、曲线图的使用写法例子,也是从网上搜集而来,感觉还是 很不错的,也整理在这里了。
国产乱码的解决方法(一)国产乱码的解决方法问题背景在使用国产软件或操作系统时,经常会遇到乱码的问题。
国产软件或操作系统默认使用国内的字符编码,与国际标准的字符编码存在差异,因此在与国际用户交互时容易出现乱码情况。
本文将介绍几种常见的解决国产乱码问题的方法。
方法一:更改字符编码1.打开国产软件或操作系统的设置菜单。
2.在设置菜单中找到“语言”或“国际化”选项。
3.在语言或国际化选项中,找到字符编码相关的设置选项。
4.将字符编码设置为国际标准的UTF-8或Unicode。
5.保存设置并重启软件或操作系统。
方法二:使用专门的乱码修复工具1.在互联网上搜索并下载专门的乱码修复工具。
2.安装并运行乱码修复工具。
3.根据乱码修复工具的提示,选择需要修复的文件或目录。
4.等待修复工具完成乱码修复的过程。
方法三:转换文件编码格式1.打开国产软件或操作系统中出现乱码的文件。
2.将文件另存为其他格式,如UTF-8、ANSI等。
3.尝试打开另存为后的文件,查看是否乱码问题得到解决。
方法四:使用第三方软件代替国产软件1.在互联网上搜索并下载国际标准的软件。
2.安装并运行国际标准软件。
3.将需要处理的文件导入国际标准软件中进行操作,避免乱码问题。
方法五:联系软件或操作系统厂商寻求支持1.找到国产软件或操作系统的官方网站或客服联系方式。
2.联系厂商并向其反馈乱码问题的详细情况。
3.根据厂商提供的解决方案或建议进行操作,寻求问题的解决。
总结国产乱码问题在使用国产软件或操作系统时经常出现,但通过更改字符编码、使用乱码修复工具、转换文件编码格式、使用国际标准软件或联系厂商等方法,可以有效解决乱码问题。
希望本文介绍的方法对大家有所帮助,使使用国产软件或操作系统变得更加愉快和顺畅。
以上是针对“国产乱码的解决”的相关方法介绍,希望对您有所帮助!。
JFreeChart中文乱码解决方案(方法汇总)此文档根据博客文章/blog/1004169整理而成由于JFreeChart组件的版本、操作平台、JDK的设置等因素,在使用JFreeChart组件时可能会出现中文乱码的现象。
遇到此问题时,可通过设置文字的字体来解决问题。
在此提供以下两种解决此问题的方法。
一、设置主题的样式(强烈推荐)在制图前,创建主题样式并制定样式中的字体,通过ChartFactory的setChartTheme()方法设置主题样式。
Java代码1//创建主题样式2StandardChartTheme standardChartTheme=new StandardChartTheme("CN");3//设置标题字体4standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));5//设置图例的字体6standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15));7//设置轴向的字体8standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15));9//应用主题样式10ChartFactory.setChartTheme(standardChartTheme);例如:Java代码11package com.zzs.jfreechart.demo;1213import java.awt.Font;1415import org.jfree.chart.ChartFactory;16import org.jfree.chart.ChartFrame;17import org.jfree.chart.JFreeChart;18import org.jfree.chart.StandardChartTheme;19import org.jfree.chart.plot.PlotOrientation;20import org.jfree.chart.title.LegendTitle;21import org.jfree.chart.title.TextTitle;22import org.jfree.data.category.DefaultCategoryDataset;2324public class JfreeChartTest {2526public static void main(String[] args) {2728// 创建类别图(Category)数据对象2930DefaultCategoryDataset dataset = new DefaultCategoryDataset();3132dataset.addValue(100, "北京", "苹果");3334dataset.addValue(100, "上海", "苹果");3536dataset.addValue(100, "广州", "苹果");3738dataset.addValue(200, "北京", "梨子");3940dataset.addValue(200, "上海", "梨子");4142dataset.addValue(200, "广州", "梨子");4344dataset.addValue(300, "北京", "葡萄");4546dataset.addValue(300, "上海", "葡萄");4748dataset.addValue(300, "广州", "葡萄");4950dataset.addValue(400, "北京", "香蕉");5152dataset.addValue(400, "上海", "香蕉");5354dataset.addValue(400, "广州", "香蕉");5556dataset.addValue(500, "北京", "荔枝");5758dataset.addValue(500, "上海", "荔枝");5960dataset.addValue(500, "广州", "荔枝");61//创建主题样式62StandardChartTheme standardChartTheme=new StandardChartTheme("CN");63//设置标题字体64standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));65//设置图例的字体66standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15));67//设置轴向的字体68standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15));69//应用主题样式70ChartFactory.setChartTheme(standardChartTheme);7172JFreeChart chart=ChartFactory.createBarChart3D("水果产量图", "水果", "水果", dataset, PlotOrientation.VERTICAL, true, true, true);73// TextTitle textTitle = chart.getTitle();74// textTitle.setFont(new Font("宋体", Font.BOLD, 20));75// LegendTitle legend = chart.getLegend();76// if (legend != null) {77// legend.setItemFont(new Font("宋体", Font.BOLD, 20));78// }79ChartFrame frame=new ChartFrame ("水果产量图",chart,true);8081frame.pack();8283frame.setVisible(true);8485}868788}二、自定义字体使用JFreeChart绘制图表的时候,如果使用默认的字体会导致图标中的汉字显示为乱码。
中文乱码的解决方法在进行中文文本处理过程中,可能会遇到乱码的情况,这主要是由于使用了不兼容的编码格式或者在数据传输过程中出现了错误。
下面是一些解决中文乱码问题的方法:1.使用正确的编码方式2.修改文件编码如果已经打开了一个包含乱码的文本文件,可以通过修改文件编码方式来解决问题。
例如,在记事本软件中,可以尝试选择“另存为”功能,并将编码方式改为UTF-8,然后重新保存文件,这样就可以解决乱码问题。
3.检查网页编码当浏览网页时遇到乱码问题,可以在浏览器的“查看”或“选项”菜单中找到“编码”选项,并将其设置为正确的编码方式(例如UTF-8),刷新网页后,乱码问题通常会得到解决。
5.使用转码工具如果已经得知文件的原始编码方式但无法通过其他方式解决乱码问题,可以尝试使用一些转码工具来将文件以正确的编码方式转换。
例如,iconv是一款常用的转码工具,可以在命令行界面下使用。
6.检查数据传输过程在进行数据传输时,特别是在网络传输中,可能会出现数据传输错误导致中文乱码。
可以检查数据传输过程中的设置和参数,确保传输过程中不会造成乱码问题。
7.检查数据库和应用程序设置在进行数据库操作和应用程序开发时,也可能会出现中文乱码问题。
可以检查数据库和应用程序的设置,确保正确地处理和显示中文字符。
8.清除特殊字符和格式有时候,中文乱码问题可能是由于文本中存在特殊字符或格式导致的。
可以尝试清除文本中的特殊字符和格式,然后重新保存或传输文件,看是否能够解决乱码问题。
总结起来,解决中文乱码问题的关键是了解文件的编码方式,并确保在处理过程中使用相同的编码方式。
此外,要注意数据传输过程中的设置和参数,以及数据库和应用程序的设置,确保正确地处理和显示中文字符。
最后,如果以上方法仍然无法解决乱码问题,可以尝试使用专业的转码工具来转换文件的编码方式。
birtChart 在linux下中文乱码的问题是Java虚拟机找不到中文字库字体文件造成的。
步骤:
1、把.bash_profile中的export LANG=zh_CN.GB2312修改为:
export LANG=zh_CN.GB18030。
因为gb2312不支持一些特殊的汉字。
2、在在生成的chart图表的XML Source里修改字体:把SansSerif修改为
SimSun。
3、找到一个能在linux下使用的中文字体,可以是Windows Xp下的
c:\windows\fonts\simsun.ttc。
4、在此要使用root用户【root/rootgnnt】登录,把上面的字体放到linux服
务器安装jdk目录下的/usr/java/jdk1.6.0_13目录里。
因为其他用户没用此项权限。
5、修改/usr/java/jdk1.6.0_13/jre/lib /fonts/fonts.dir
3.1、把第一行的数字加一 (如果是48就改为49).
3.2、在最后一行添加:
simsun.ttc -SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
6、修改/usr/java/jdk1.6.0_13/jre/lib/font.properties文件
把含有iso8859-1行从等号后面全部改为:
-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
含有“CharToByteISO8859_1”的可以不改)。
7、启web服务器。
中文乱码的解放方法
中文乱码的解决方法一般分为六个步骤来实现:
1、更改编码格式:首先应该对乱码文件的字符编码进行更改,如果在Word文档、浏览器网页或其他软件中出现乱码,可以
尝试将文件编码格式更改为UTF-8或GBK等。
2、重新安装系统:如果更改了文件编码格式,但还是未能够
解决乱码问题,可以考虑重新安装系统,重置安装后,很有可能会解决乱码问题。
3、安装字符集:如果文件中出现不规则的中文字符,可以尝
试安装支持的中文字符集,安装后即可解决乱码问题。
4、更换显示器:如果文件中部分字符显示出现了乱码,可以
尝试更换显示器来解决乱码问题,因为有时候乱码可以由于显示器的编码不对导致的。
5、检查显卡驱动:如果是显卡驱动不正常而导致的乱码,可
以找到合适的显卡驱动并重新安装,以解决乱码问题。
6、调整文件字体设置:如果文件中乱码是由于字体设置不合
适所导致的,可以调整字体大小或更换字体,从而解决乱码问题。
以上就是解决中文乱码的六个常用方法,在乱码问题出现时,可以按照上述步骤一一尝试,以解决乱码问题。
看这一篇就够啦,处理matplotlib数据可视化的中文乱码情况的四种方式摘要matplotlib是优秀的数据可视化第三方库,但是对于中文的支持并不是很友好。
这里总结了四种处理可视化数据图表显示中文的方式,需要手动设置之后才能很好的显示中文。
依赖库1# 导入matplotlib绘图对象23import matplotlib.pyplot as plt设置字体方式(局部)1'''2设置字体方式(局部)3'''4# 导入matplotlib的字体管理库56from matplotlib.font_manager import FontProperties78# 创建字体对象并设置大小、一般网页字体大小设置为14910font = FontProperties(fname="SimHei.ttf",size=14)1112# 设置X轴标签值、引入中文设置1314plt.xlabel("X轴标签中文",fontproperties=font)设置字典方式(局部)1'''2设置字典方式(局部)3'''4# 设置字体显示字典56dict_ = {"family":"KaiTi","size":14,"color":"blue"} 78# 设置X轴标签值、引入中文设置910plt.xlabel("X轴标签中文",fontdict=dict_)设置字体方式(全局)1'''2设置字体方式(全局)3'''4# 设置中文56plt.rcParams['font.sans-serif']=['SimHei']78# 坐标轴负号显示不正常及不能正常显示中文910plt.rcParams['axes.unicode_minus']=False1112# 全局设置以后不需要引用设置字典方式(全局)1'''2设置字典方式(全局)3'''4# 定义字体的字典数据56font = {"family":"SimHei",78"weight":"bold",910"size":"14"}1112# 全局引用1314plt.rc('font',**font) # 引用字体1516plt.rc('axes',unicode_minus=False) # 坐标轴负号显示不正常及不能正常显示中文关注 Python集中营领取编程干货培养编程思想▼。
如何解决表单提交的中⽂乱码问题⼀:form在前台以post⽅式提交数据:浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的⼆进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开⽹页,浏览器就以哪个码表提交数据。
数据到达服务器后,数据(98 99)要封装到request中,在servlet中调⽤Request的getParameter⽅法返回的是字符串(“中国”),⽅法内部拿到数字后要转成字符,⼀定要查码表,由于request的设计者是外国⼈,所以默认查的是他们常⽤的ISO8859-1,这就是请求数据产⽣乱码的根源。
package com.yyz.request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//以post⽅式提交表单public class RequestDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//请求数据的中⽂乱码问题request.setCharacterEncoding("UTF-8");//客户端⽹页我们控制为UTF-8String username = request.getParameter("username");//获取数据正常,输出数据时可以查阅不同码表response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开PrintWriter out = response.getWriter();out.write(username);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}⼆:form在前台以get⽅式提交数据:get⽅式提交的数据依然是浏览器⽤什么码表打开就⽤什么码表发送。
php中文乱码的解决方法关于php中文乱码的解决方法php即可以在web页面上执行,又可以通过PHP CLI(命令行界面)在命令行执行PHP脚本。
一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,下面是店铺整理的关于php中文乱码的解决方法,欢迎来学习!一、PHP网页编码1. php文件本身的编码与网页的编码应匹配a). 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312″),静态页面添加<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b). 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8″),静态页面添加<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>,所有文件的编码格式为utf-8。
保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。
2. php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。
二、PHP与Mysql的数据交互中的编码PHP与数据库的编码应一致1. 修改mysql配置文件my.ini或f,mysql最好用utf8编码复制代码代码如下:[mysql]default-character-set=utf8[mysqld]default-character-set=utf8default-storage-engine=MyISAM在[mysqld]下加入:default-collation=utf8_bininit_connect='SET NAMES utf8′2. 在需要做数据库操作的php程序前加mysql_query(”set names ‘编码'”);,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了三、PHP与操作系统相关Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in …Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move ” to ” in …Warning: filesize() [function.filesize]: stat failed for … in …Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..在Linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的`上传、下载。
php中文乱码问题的解决方案php中文乱码问题的解决方案乱码是我们在开发可能经常遇见,也是最让人头疼的一个问题了,下面是店铺分享的php中文乱码问题的解决方案,一起来看一下吧。
第一种:解决HTML中中文乱码问题方法如果你的HTML文件文件出现了乱码问题,那么你可以在head 标签里面加入UTF8编码(国际化编码):UTF-8是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>示例我们现在的HTML5文件,设置编码更为简单,像下面这样第二种、HTML和PHP混合的页面解决方案如何是HTML和PHP混编,除了按照第一个方法所说的操作之外,还需要在PHP文件的最上面加入这句代码:<?phpheader("content-type:text/html;charset=utf-8"); //设置编码>第三种、纯PHP页面的中文乱码问题(数据是静态的)如果你的PHP页面出现了乱码,只需要在页面的开始处加入下面代码就可以了。
<?phpheader("content-type:text/html;charset=utf-8"); //设置编码>第四种、PHP+Mysql中文乱码问题这个除了按照第三种所说的操作之外,还要在你的数据查询/修改/增加之前加入数据库编码。
而且,值得注意的是,这里的'UTF8和之前的不一样,中间是没有横线的。
<?phpmysql_query('SET NAMES UTF8');//接下来的就是查出数据或者修改,增加>如何你使用的MySQL版本在 4.1或更高版本,可以在链接数据库操作后,设置一个字符编码,像下面这样UTF-8编码只是其中一种编码,如果不想使用utf-8编码,也可以使用其他编码,只需将UTF-8换成你想使用的编码就可以,目前中文网站开发中主要用的是GB2312和UTF-8 两种编码。
pChart中文乱码修改方式
看中了pChart,根据其提供的demo玩玩,发现中文却是显示了乱码,不知道为什么。
大概是用这个东东的人少,网上没搜到有人遇到类似的问题并得到解决。
使用PHP生成图片是需要安装GD库来支持的,pChart作为一个php实现的工具自然最终也是通过调用GD库函数来实现的。
1)查看pChart的实例代码会发现其有一个setFontProperties方法用于设定字体属性:void setFontProperties($FontName,$FontSize) 。
注意这里的传入参数$FontName是一个字体文件,此值最终会被GD库中的imagettftext函数使用:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color ,string $fontfile, string $text ),这里的$fontfile就是setFontProperties设定的字体文件,将其修改成简体中文,如yahei.tff。
2)一般.php文件为繁体中文,直接输入文字就可以了。
如果要用简体,要显示的中文必须加以下函数:
/**
* 将文本由UTF8编码转化为数字形式编码(HTML实体)
* @param $arr 该参数可以为数组或者string
*/
function bm($ar) {
if(! is_array($ar)) return iconv('gbk', 'utf-8', $ar);
foreach($ar as &$v) $v = iconv('gbk', 'utf-8', $v);
return $ar;
}
3)在调用时,用到以下内容:
<script src="imagemap.js" type="text/javascript"></script>
<img src="draw.php" id="testPicture" alt="" class="pChartPicture"/>
</body>
<script>
addImage("testPicture","pictureMap","draw.php?ImageMap=get");
</script>
显示会出现筹码。
修改class/pimage.class.php中
$Title = htmlentities($Title,ENT_QUOTES,"ISO-8859-15");
为
$Title = htmlentities($Title,ENT_QUOTES,"UTF-8");。