liunx 中文乱码 和 html转图片中文乱码问题处理方式以及linux中文字体包

4 篇文章 0 订阅

项目场景:

在使用freemark模板生成Html转为img文件的时。


问题描述:

提示:
在转成图片时会出现中文乱码。
html生成的图片的代码:
但是当前代码在window系统的时候生成一直成功,但是在linux系统中就是乱码,小方块。这里就想到了可能是系统字体问题,于是百度。

        final File f = new File(tempFilePath,inputFilename);
        if(!f.getParentFile().exists()){
            f.getParentFile().mkdirs();
        }
        //将html转成文件。中文乱码问题处理为以下方式
        Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),"UTF-8"));
        writer.write(html);
        writer.flush();
        writer.close();
        //将xhtml文件转成图片
        final File resultImgFile= new File(tempFilePath,outputFilename);
        try {
            final Java2DRenderer renderer = new Java2DRenderer(f, widthImage);
            final BufferedImage img = renderer.getImage();
            final FSImageWriter imageWriter = new FSImageWriter();
            imageWriter.setWriteCompressionQuality(0.9f);
            FileOutputStream fileOutputStream = new FileOutputStream(resultImgFile);
            OutputStream fos = new BufferedOutputStream(fileOutputStream);
            imageWriter.write(img, fos);
            fos.flush();
            fos.close();
        }finally {
            f.delete();
        }

原因分析:

BufferedImage在使用的时候若内容中包含中文应该是调用到当前操作系统中匹配的字体类型,若没有找到就会出现乱码。

解决方案:

1.在linux中安装字体类型。
1.1 安装mkfontscale 、mkfontdir 命令
在linux中执行以下命令:

'# cd /usr/share/fonts  (若fonts不存在则创建)
'# mkdir winFont  (创建好目录后,将文件simsun.ttc拷到当前文件中)
'# mkfontdir (执行成功后会出现fonts.dir文件夹)
'# mkfontscale (执行成功后会出现fonts.scale文件夹)

最后如果执行成功了需要重新启动出现问题的系统服务。
··········································································
若在执行mkfontdir的过程中出现

 mkfontdir: command not found
 // 解决方案 在centos系统中
 yum install fontconfig
 yum install mkfontscale
 yum install fontscale

查看当前系统语言类型 echo $LANG
设置中文:export LANG=zh_CN.UTF-8
设置英文:export LANG=en_US.UTF-8

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值