精华内容
下载资源
问答
  • 图表中文字生成依赖于系统本地字体,但在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;
        }

     

    展开全文
  • 图表中文字生成依赖于系统本地字体,但在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对象的实例置为静态,只创建一次;

    展开全文
  • 1.准备一个想要显示字体文件,这里用宋体(文件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。

    展开全文
  • SUSE 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容器即可。

    展开全文
  • 项目中包含了一项生成JPG图片的功能,该功能需要使用JAVA的Graphics2D动态生成图片中的文字,原来Windows平台中没有发现问题,但是迁移至Linux平台后发现生成的中文变成了乱码。 百度发现是因为Linux下没有相应的...
  • java 生成的XML文件 我本地文件编码是GBK的, 我放到服务器Linux),生成的XML文件 编码却是UTF-8 的 , 这个问题怎么解决,我需要GBK编码的文件 ,服务器怎么也转不过来, 要不出现乱码,要不就是utf-8的...
  • 由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。...
  • 2.windows下找到改字体对应文件,路径为C:\Windows\Fonts。一般宋体对应simsunb.ttf,微软雅黑对应MSYH***。 3.ps -ef | grep java命令可以看服务器对应jre。 找到jre对应字体文件路径/mnt/hd1/isp/...
  • 很多情况是在windows本地调试没有问题,但是在linux服务器上会出现中文乱码或不显示问题,我遇到多次都是linux上没有添加中文字体原因 首先,linux系统字体文件放在/usr/share/fonts/目录以及用户~/.fonts和...
  • linuxjava读取文件名乱码

    千次阅读 2016-07-18 17:50:19
    一般Windows机器上生成的文件名为GBK,通过ftp、CVS等方式传输到linux上,与linux的系统编码UTF-8不相符,这样就造成读取的文件名乱码,从而程序异常。 解决这个问题的最简单的做法,调整JAVA运行环境下的...
  • 由于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...
  • 由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。...
  • Linux VSFTPD乱码问题

    千次阅读 2007-11-17 14:01:00
    Linux VSFTPD乱码问题最近项目客户那边搭建FTP,是为了能够下载程序生成的文件,但是文件生成之后,文件名有汉字,乱码的问题出来了。环境是:Redhat Linux AS4系统编码ja_JP.UTF-8Java程序是Windows下编译并且...
  • 使用java batik 将svg代码转换成png图片,功能测试都正常,将项目打包到linux服务器后测试,中文乱码了 原因: 经过一番折腾发现是字体问题,linux系统没有微软雅黑字体 解决: windows C:\Windows\...
  • ">生成的文件名反而是乱码</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) ...
  • 实例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 搜索快的原因:...
  •  支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。  使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib...
  • 实务6 如何找到oracle安装时生成的日志文件 实务7 安装oracle时,是否需要安装jdk 实务8 解压安装文件时,报告无权限 实务 实务9 安装oracle软件并创建完数据库后,服务内的oraclesid显示 实务9 “启动”而不是...
  • 实务6 如何找到oracle安装时生成的日志文件 实务7 安装oracle时,是否需要安装jdk 实务8 解压安装文件时,报告无权限 实务 实务9 安装oracle软件并创建完数据库后,服务内的oraclesid显示 实务9 “启动”而不是...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

java生成的文件在linux上乱码

java 订阅
linux 订阅