-
JFreeChart 生成图表 在linux服务器中文乱码问题 及java 自定义字体
2019-01-22 15:18:42图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题; 如下方法可以解决该问题: 在项目中加入ttf字体文件; 代码中通过该字体文件创建Font对象; 通过该Font...
java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术;图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题;
如下方法可以解决该问题:
在项目中加入ttf字体文件;
代码中通过该字体文件创建Font对象;
通过该Font对象控制图表中文字样式,即可避免中文乱码,同时,避免项目移植引起的字体样式丢失;
还有另一种解决方案给程序所在的Linux服务器安装相应的字体,这样就不需要在程序包中加入字体文件;
但,程序移植到其他服务器之后字体样式将丢失;
以下是从字体文件创建Font的代码:private static java.io.File file = null;
private staticFont font=null;
private static void initFontFile() {
if (file == null) {
String vPath = ChartUtil.class.getClassLoader().getResource("").getPath();
vPath = vPath + File.separator + "fonts" + File.separator + "simhei.ttf";
file = new java.io.File(vPath);
}
}
private static Font getFont(int style, Float size) {
Font defFont = new Font("黑体", style, 12);if(null !=font ) return;
try {
initFontFile();
if (file == null || !file.exists()) {
return defFont;
}
java.io.FileInputStream fi = new java.io.FileInputStream(file);
font = Font.createFont(Font.TRUETYPE_FONT, fi);
fi.close();
// 这一句需要注意
// Font.deriveFont() 方法用来创建一个新的字体对象
font= font.deriveFont(style, size);
return font;
} catch (Exception e) {
}
return defFont;
} -
JFreeChart 生成图表 在linux服务器中文乱码问题
2016-08-09 08:33:33图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题; 如下方法可以解决该问题: 在项目中加入ttf字体文件; 代码中通过该字体文件创建Font对象; 通过该Font...JFreeChart 生成图表 在linux服务器中文乱码问题
java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术;
图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题;
如下方法可以解决该问题:
- 在项目中加入ttf字体文件;
- 代码中通过该字体文件创建Font对象;
- 通过该Font对象控制图表中文字样式,即可避免中文乱码,同时,避免项目移植引起的字体样式丢失;
还有另一种解决方案
- 给程序所在的Linux服务器安装相应的字体,这样就不需要在程序包中加入字体文件;
- 但,程序移植到其他服务器之后字体样式将丢失;
以下是从字体文件创建Font的代码:
private static java.io.File file = null; private static void initFontFile() { if (file == null) { String vPath = ChartUtil.class.getClassLoader().getResource("").getPath(); vPath = vPath + File.separator + "fonts" + File.separator + "simhei.ttf"; file = new java.io.File(vPath); } } private static Font getFont(int style, Float size) { Font defFont = new Font("黑体", style, 12); try { initFontFile(); if (file == null || !file.exists()) { return defFont; } java.io.FileInputStream fi = new java.io.FileInputStream(file); Font nf = Font.createFont(Font.TRUETYPE_FONT, fi); fi.close(); // 这一句需要注意 // Font.deriveFont() 方法用来创建一个新的字体对象 nf = nf.deriveFont(style, size); return nf; } catch (Exception e) { } return defFont; }
本文链接:http://blog.csdn.net/tomorrow13210073213/article/details/52159369
2017-05-22补充:
以上代码存在一个比较严重的问题:
代码上线运行后会在tomcat的temp目录下生成大量临时文件,并且不会自动删除;
虽然,代码里“fi.close();”已经将“FileInputStream”关闭了,但还是会生成临时文件无法删除,暂时不知道原因;
解决方式如下:
将如下代码替换:
java.io.FileInputStream fi = new java.io.FileInputStream(file); Font nf = Font.createFont(Font.TRUETYPE_FONT, fi); fi.close();
替换成:
Font nf = Font.createFont(Font.TRUETYPE_FONT, file);
即:直接通过file创建字体;2018-11-12补充:
“2017-05-22补充”内容每次获取字体还是涉及到文件操作,依然会出现临时文件的问题,解决方式是直接将Font对象的实例置为静态,只创建一次;
-
解决使用JFreeChart生成图表在Linux服务器上显示乱码问题
2017-08-21 17:07:041.准备一个想要显示的字体文件,这里用宋体(文件simsun.ttf),按照下面步骤添加到jdk中,这样项目就可以调用2.操作:1) 使用SecureCRT连接目标服务器。2) root@fort1:~# cd /usr/local/java/jdk1.8.0_11/jre/lib/...1.准备一个想要显示的字体文件,这里用宋体(文件simsun.ttf),按照下面步骤添加到jdk中,这样项目就可以调用
2.操作:
1) 使用SecureCRT连接目标服务器。
2) root@fort1:~# cd /usr/local/java/jdk1.8.0_11/jre/lib/fonts/
3) root@fort1:~# mkdir fallback
4) 将左面文件simsun.ttf拷贝到fallback目录下。
5) root@fort1:~# cd fallback
6) root@fort1:~# mkfontscale
7) root@fort1:~# mkfontdir
8) 重新启动tomcat。 -
docker 中文目录及文件乱码_docker环境下tomcat容器生成中文名称文件乱码java
2020-12-22 11:58:39SUSE Linux宿主机loclae 显示zh_CN宿主机上touch 中文文件名称可以正常在shell里显示docker tomcat容器 locale zh_CN.gbkdocker容器内部touch 中文文件名称可以正常在shell里显示但是通过servlet生成的中文文件名称...宿主机:SUSE Linux
宿主机loclae 显示zh_CN
宿主机上touch 中文文件名称可以正常在shell里显示
docker tomcat容器 locale zh_CN.gbk
docker容器内部touch 中文文件名称可以正常在shell里显示
但是通过servlet生成的中文文件名称显示乱码???
这个docker Tomcat的镜像是通过dockerfile构建的,以centos7为基础,复制了一个离线安装tomcat包
然后启动容器时候运行run.sh
#!/bin/bash
sh /usr/local/apache-tomcat-9.0.34/bin/startup.sh
tail -f /usr/local/apache-tomcat-9.0.34/logs/catalina.out
问题排查,首先查看tomcat配置是否有问题
tomcat conf server.xml 是否设置UTF-8
connectionTimeout="20000"
redirectPort="8443"
relaxedQueryChars="[]|{}^\`"<>"
maxThreads="1000"
URIEncoding="UTF-8" />
tomcat bin 启动文件catalina.sh
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi
修改为以下:这里解决了catalina.out的乱码问题
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
fi
docker 容器是否支持中文
docker exec -it tomcat bash
locale
里面已经改了,LANG=zh_CN.utf8,上面几个都不能解决。
没办法只能去java里面打印日志
import java. util.Properties;
import java.nio.charset.Charset;
....
Properties properties=System.getProperties();
System.out.prinln("编码"+properties.getProperty("file.encoding"));
System.out.prinln("编码"+properties.getProperty("sun.jnu.encoding"));
System.out.prinln(Charset.defaultCharset());
.....
发现,日志里面sun.jnu.encoding是ANSI_X3.4-1968;
file.encoding跟Charset.defaultCharset() 都是UTF-8
难怪会乱码,sun.jnu.encoding是会影响文件命名的,为啥这里不是UTF-8?
原来需要在catalina.sh里面配置。果断加入tomcat bin 启动文件catalina.sh上面几行
JAVA_OPTS="$JAVA_OPTS -Dsun.jnu.encoding=UTF8"
然后手动重启tomcat
cd /usr/local/apache-tomcat-9.0.34/bin
./shutdown.sh
./startup.sh
问题解决。
你以为完了?没有。。。
后面更改了web项目部分文件后重启容器发现问题依然出现。再次查看日志居然问题复现,这就奇怪了。为啥编码回去了?然后我又进入容器手动重启tomcat发现问题又解决了。那么现在明显是容器启动过程中的问题了。
为了验证我的想法,我在run.sh里添加了日志
#!/bin/bash
locale>>/home/locale.log
sh /usr/local/apache-tomcat-9.0.34/bin/startup.sh
tail -f /usr/local/apache-tomcat-9.0.34/logs/catalina.out
重启容器后发现locale.log内容是
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
这就是了,启动docker容器的时候顺带启动了Tomcat,但是启动Tomcat的时候环境居然是不支持中文的POSIX.
既然知道问题原因,那么就好解决了。一种方法是重新打镜像,把LANG=zh_CN添加到dockerfile里的ENV里。
我这里尝试了另外一种懒方法,在run.sh里启动Tomcat命令前重新设置一下LANG
#!/bin/bash
locale>>/home/locale.log
LANG=zh_CN
source /etc/profile
locale>>/home/locale.log
sh /usr/local/apache-tomcat-9.0.34/bin/startup.sh
tail -f /usr/local/apache-tomcat-9.0.34/logs/catalina.out
再次查看locale.log发现问题解决。程序运行也没问题。不用每次重启tomcat时候进入容器内部了,直接重启docker容器即可。
-
合成图片上用 java Graphics2d 写字 本地展示正常 linux 服务器乱码 解决方案
2019-08-08 11:04:38项目中包含了一项生成JPG图片的功能,该功能需要使用JAVA的Graphics2D动态生成图片中的文字,原来在Windows平台中没有发现问题,但是迁移至Linux平台后发现生成的中文变成了乱码。 百度发现是因为Linux下没有相应的... -
求助:java 生成XML文件编码问题
2017-02-28 03:06:53java 生成的XML文件 在我本地文件编码是GBK的, 我放到服务器上(Linux),生成的XML文件 编码却是UTF-8 的 , 这个问题怎么解决,我需要GBK编码的文件 ,服务器上怎么也转不过来, 要不出现乱码,要不就是utf-8的... -
【Linux/Ubuntu学习3】解决ubuntu解压windows生成的zip文件时乱码问题
2016-01-03 19:50:15由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。... -
生成带文字的二维码本地正常,linux服务器乱码问题
2020-07-20 18:06:352.在windows下找到改字体的对应文件,路径为C:\Windows\Fonts。一般宋体对应simsunb.ttf,微软雅黑对应MSYH***。 3.ps -ef | grep java命令可以看服务器对应的jre。 找到jre对应的字体文件路径/mnt/hd1/isp/... -
linux中安装中文字体--解决java使用Graphics2D等生成图片、二维码以及使用POI转换生成图片中中文乱码问题
2018-12-10 14:13:17很多情况是在windows本地调试没有问题,但是在linux服务器上会出现中文乱码或不显示的问题,我遇到多次都是linux上没有添加中文字体的原因 首先,linux系统的字体文件放在/usr/share/fonts/目录以及用户的~/.fonts和... -
linux下java读取文件名乱码
2016-07-18 17:50:19一般在Windows机器上生成的文件名为GBK,通过ftp、CVS等方式传输到linux上,与linux的系统编码UTF-8不相符,这样就造成读取的文件名乱码,从而程序异常。 解决这个问题的最简单的做法,调整JAVA运行环境下的... -
解决ubuntu解压windows生成的zip文件时乱码问题
2020-10-09 08:36:11由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。Sun... -
poi生成excel文件中文乱码问题
2014-04-11 16:22:15利用POI生成excel文件,在本机Windows测试成功,发布到linux服务器上,生成的文件中文有部分是乱码。项目的编码是utf-8,数据库里的编码是gbk,一般Windows中文系统的编码是gb2312,linux系统是utf-8,用到linux... -
ubuntu解压windows生成的zip文件时乱码问题
2013-07-23 11:14:37由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。... -
Linux VSFTPD乱码问题
2007-11-17 14:01:00Linux VSFTPD乱码问题最近项目在客户那边搭建FTP,是为了能够下载程序生成的文件,但是文件生成之后,文件名有汉字,乱码的问题出来了。环境是:Redhat Linux AS4系统编码ja_JP.UTF-8Java程序是在Windows下编译并且... -
java使用batik 将svg代码转换成png图片 linux服务器中文乱码
2018-12-18 09:54:57使用java batik 将svg代码转换成png图片,功能测试都正常,将项目打包到linux服务器后测试,中文乱码了 原因: 经过一番折腾发现是字体的问题,linux系统上没有微软雅黑字体 解决: 在windows C:\Windows\... -
linux下File.createNewFile(“中文文件名”) 乱码问题
2012-03-13 23:21:26">生成的文件名反而是乱码</span></span> ;"><span lang="EN-US"><span style="font-family: Calibri; font-size: small;"> </span></span> ;"><span><span style="font-size: small;">改成</span></span> ;">... -
linux 安装中文字体
2019-12-26 17:12:42遇见java项目预览或生成的pdf文件,在windows系统上能够正常显示,但是在linux系统上中文乱码 经排查是因为linux系统上没有安装中文字体 安装步骤: 1. 先将字体文件放入创建的目录下(/usr/share/fonts/chinese) ... -
《Java Web开发实战1200例(第I卷)》(清华出版.卢瀚.王春斌).part2 高清完整PDF版
2016-06-13 12:06:47实例017 在Linux系统下安装配置Tomcat 第2章 Java语言基础 2.1 基本语法 实例018 输出错误信息与调试信息 实例019 从控制台接收输入字符 实例020 重定向输出流实现程序日志 实例021 自动类型转换与强制类型... -
Maven在生成环境的使用及其配置说明 Nexus Repository 3 介绍 Maven 私有库Sonatype Nexus2 SonarQube代码质量管理 SonarQube 代码质量管理平台的配置与使用 linux mysql安装 单节点 安装percona 5.7...
-
优化项目结构,抽象文件预览接口,更方便的加入更多的文件类型预览支持,方便二次开发 新增英文文档说明(@幻幻Fate,@汝辉)贡献 新增图片预览文件支持类型 修复压缩包内轮播图片总是从第一张开始的问题 2018年01...
-
安装后生成的目录说明、VM 设置 首次使用的基础设置介绍(新用户必看) UI 界面 UI 主题、字体、编辑区主题、文件编码修改、乱码问题 IntelliJ IDEA 特别地方(新用户必看) IntelliJ IDEA 搜索快的原因:...
-
易语言程序免安装版下载
2011-04-07 09:28:50支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。 使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib... -
Oracle数据库精讲与疑难解析part2
2013-07-29 11:26:32实务6 如何找到oracle安装时生成的日志文件 实务7 安装oracle时,是否需要安装jdk 实务8 解压安装文件时,报告无权限 实务 实务9 安装oracle软件并创建完数据库后,服务内的oraclesid显示 实务9 “启动”而不是... -
Oracle数据库精讲与疑难解析part1
2013-07-29 11:24:41实务6 如何找到oracle安装时生成的日志文件 实务7 安装oracle时,是否需要安装jdk 实务8 解压安装文件时,报告无权限 实务 实务9 安装oracle软件并创建完数据库后,服务内的oraclesid显示 实务9 “启动”而不是...
-
通过新颖的二元君主蝶优化算法解决0-1背包问题
-
用于文档聚类的半监督概念分解
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
宏宇社:国外lead入门教程(四)lead任务必备软件
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
需求分析与建模最佳实践
-
leetcode算法第四题
-
x++和++x的区别
-
linux基础入门和项目实战部署系列课程
-
RootCluster.github.io:组织网站-源码
-
破折号-源码
-
ELF视频教程
-
用nodejs抓取-源码
-
ASP.NET学习——用户增删改查(三层,数据库+源码)
-
XPath表达式语法详解
-
什么是SYSML:registered:?
-
深入剖析 ConcurrentHashMap
-
微博时间格式转换
-
RapidScada从入门到精通
-
2012年上半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】