java graphics2d 乱码_Graphics2D 中文乱码[通俗易懂]

今天遇到了一个乱码问题,合成的小票图片上的中文全部变成了口口口,后来在网上查了资料,发现是Graphics2D用了宋体字,而linux服务器上没有对应的字体库。把本地的字体库上传上去就解决了。本地字体库位置:(winXP宋体字)C:\WINDOWS\Fonts\simsun.ttcsimsun.ttc改名为simsun.ttfrz命令(需提前装,其它方式也行)复制到linux:/usr/ja…

大家好,又见面了,我是你们的朋友全栈君。

今天遇到了一个乱码问题,合成的小票图片上的中文全部变成了口口口,后来在网上查了资料,发现是Graphics2D用了宋体字,而linux服务器上没有对应的字体库。

把本地的字体库上传上去就解决了。

本地字体库位置:(winXP 宋体字)C:\WINDOWS\Fonts\simsun.ttc

simsun.ttc 改名为 simsun.ttf

rz命令(需提前装,其它方式也行)复制到linux:/usr/java/jdk1.7.0_79/jre/lib/fonts/

参考文档:http://ember319.iteye.com/blog/254015

以下为原文内容

问题描述:

用户使用手机登录我们系统,在订购产品时,需要从服务器端下载一张图片,显示到手机屏幕上,该图片上可能包含中英文字符,视情况而定。 结果测试下来,英文没有问题,中文打印为方块。

环境描述:

开发平台为WinXP,测试环境为Solaris10。

数据来源:

用以打印到图片的信息通过Web serice从另一系统获取。

=====

下面说一下解决的思路,

1、是否字符编码问题

为了检查获取的字符串的编码是否正确,使用下面的方式尝试多种字符集编码的转换,但是都没有效果;

Java代码  0dabeb09fc38da2a0ee3d1253855fd5a.png

String message=“…”;//ws获取到的信息

new String(message.getBytes(“utf8″),”gbk”);

回过来仔细考虑了一下我们的系统,系统的jsp页面及数据库编码都是采用的utf-8编码,无论是录入、保存还是显示都没有出现中文乱码问题;尤其是系统之间多处使用ws方式同步数据,也没有出现乱码问题,于是认为ws获取到的信息同样是utf-8编码。为了验证这个想法,做了一个jsp页面,使用utf-8的方式显示获取到的信息,在不经过任何转换的前提下,正确显示中文。最终确定,不是字符集编码的问题。

2、是否打印过程发生了问题

查看了JDK API的说明,发现在使用字体的时候,我没有特别设定,使用了默认字体。写了一个简单的输出平台默认字体的类,得到的字体却是一样的信息:

Java代码  0dabeb09fc38da2a0ee3d1253855fd5a.png

Default font:java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12]

于是到网上查找“java drawString 中文乱码” 关键字信息,查找csdn的一条信息:http://topic.csdn.net/u/20080603/13/3590c1f9-30bc-4e4d-bb2a-ada472b05973.html。大家可以去看一下,我就不贴过来了。我的动作是:

1) 指定打印到图片的字体为中文

Java代码  0dabeb09fc38da2a0ee3d1253855fd5a.png

g2d.setFont(new Font(“宋体”, Font.PLAIN, 12));

2) 上传WinXp 中的宋体字体文件到服务器(Solaris)

我的本地字体文件地址是“C:\WINDOWS\Fonts\simsun.ttc”,上传到服务器地址是:“/usr/jdk/instances/jdk1.5.0/jre/lib/fonts/simsun.ttc”

3) 通过验证程序,确定图片上的小方块正确显示为中文

打印图片中文乱码问题到这里就解决了。

考虑起来,因为打印字符成为图片,需要用到像素排列,如果字体不对,的确是没有办法打印啊。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129003.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ffmpeg hevc_ffmpeg视频解码

    ffmpeg hevc_ffmpeg视频解码本次目标:1)将容器中的音频码流和视频码流分离出来。2)针对mp4文件中的码流情况进行修复。解封装的基本过程:#include<stdio.h>#include”libavcodec/avcodec.h”#include”libavformat/avformat.h”//MPEG-TS文件解封装得到的码流可播放,MP4解封装得到的码流不可播放;//这与容器的封装方式有关。voiddemuxer(constchar*url){//初始化格式上下文

    2022年10月16日
  • mysql如何使用前缀索引_MySQL的前缀索引你是如何使用的[通俗易懂]

    mysql如何使用前缀索引_MySQL的前缀索引你是如何使用的[通俗易懂]灵魂3连问:什么是前缀索引?前缀索引也叫局部索引,比如给身份证的前10位添加索引,类似这种给某列部分信息添加索引的方式叫做前缀索引。为什么要用前缀索引?前缀索引能有效减小索引文件的大小,让每个索引页可以保存更多的索引值,从而提高了索引查询的速度。但前缀索引也有它的缺点,不能在orderby或者groupby中触发前缀索引,也不能把它们用于覆盖索引。什么情况下适合使用前缀索引?当字符…

    2022年5月18日
  • java treeset subset_Java TreeSet subSet()方法

    java treeset subset_Java TreeSet subSet()方法JavaTreeSetsubSet()方法java.util.TreeSet.subSet(EfromElement,EtoElement)方法用于返回位于给定范围(包括fromElement和不包括toElement)之间的一组元素。1语法publicSortedSetsubSet(EfromElement,EtoElement)2参数fromElement:这是返回集的最…

    2022年10月31日
  • eclipse开发c++时cout和endl报错

    eclipse开发c++时cout和endl报错

    2022年1月29日
  • Java 内存模型

    Java 内存模型

    2022年3月3日
  • 如何使用adb命令安装apk到电视上[通俗易懂]

    如何使用adb命令安装apk到电视上[通俗易懂]使用此命令之前,先确定你的电视已打开adb调试服务如何打开请参考:TCLMS平台电视如何实现adb连接从而安装第三方应用程序需要用到的软件Windows下,选择”开始”-&amp;gt;运行-&amp;gt;cmd,进入命令行模式;进入adb的目录,如adb在D盘adbtools文件夹中,则:d:cdadbtools如果嫌麻烦,可以在adb目录中右击|在此处直接打开命令窗口输…

    2022年5月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号