java生僻字解决方案

原帖见http://hi.baidu.com/xmltiger/blog/item/f86ebdec72332f4878f05591.html 有所增加内容

 

    java应用中经常会碰到中文生僻字的输入和输出,由于java内部编码是ucs-2,生僻字乱码主要发生在数据存储、数据处理过程和java报表展现中。

数据存储:
1、数据库:要求数据库字符集支持的汉字更多。
sybase:字符集使用cp936或gb18030;db2:字符集使用GBK,oracle:字符集使用ZHS16GBK
2、XML文件:内部编码采用gb18030

 

数据处理:

java在读写数据时主要依赖操作系统的locale,所以java程序运行环境要求的LANG环境变量为zh_CN.gb18030,在linux、aix、hp-ux上都有该字库,用locale -a命令查看是否安装,如果没有安装即可

 

java报表展现

设置字体时,要设置为宋体18030,客户端必须安装18030字体,否则在报表中无法显示

### Java 中解决绘图时生僻字显示问题的方法 在 Java 的图形绘制过程中,如果遇到需要显示汉字中的生僻字的情况,可能会因为默认字体不支持这些字符而导致乱码或者空白方框的现象。以下是几种常见的解决方案: #### 1. 使用自定义字体文件 通过加载外部 TTF 或 OTF 字体文件来替代系统默认字体可以有效解决问题。某些专门设计的中文字体会包含更多的 Unicode 编码范围内的字符集,从而覆盖更多生僻字。 ```java import java.awt.Font; import java.io.InputStream; public class CustomFontExample { public static Font loadCustomFont(String fontPath, int size) throws Exception { try (InputStream is = CustomFontExample.class.getResourceAsStream(fontPath)) { return Font.createFont(Font.TRUETYPE_FONT, is).deriveFont((float)size); } } } ``` 此代码片段展示了如何从资源路径加载一个 TrueType 字体并将其应用于程序之中[^1]。需要注意的是,在实际应用前应当确认所选字体确实包含了目标生僻字的支持。 #### 2. 设置全局字体环境 对于整个应用程序而言,可以通过设置 GraphicsEnvironment 来更改所有组件使用的默认字体为能够良好渲染复杂中文字符的一个版本。 ```java GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(CustomFontExample.loadCustomFont("/path/to/font.ttf", 12)); ``` 上述例子说明了注册新字体到当前运行环境中去的过程[^2]。一旦完成这一步骤之后,后续创建出来的任何 GUI 控件都会自动继承这个新的字体设定除非另有指定。 #### 3. 动态调整单个文本对象的字体属性 当只需要针对特定部分的文字做特殊处理而不是改变整体界面风格的时候,则可以直接修改该段落对应的 AttributedString 属性即可实现局部优化效果而不影响其他区域的表现形式。 ```java AttributedString attributedString = new AttributedString("测试生僻字"); attributedString.addAttribute(TextAttribute.FONT, customFont); g.drawString(attributedString.getIterator(), xPosition, yPosition); ``` 这里演示了一个简单的案例,其中 `customFont` 是之前已经实例化好的支持更广泛编码集合的大号宋体或其他适配类型的实例对象;而最后调用 drawString 方法时候传入参数即为我们刚刚构建完毕后的迭代器结构[^3]。 综上所述,无论是采用单独引入第三方开源项目所提供的高质量全量收录表意象形符号库还是仅仅简单替换掉几个关键位置上的基础样式都可以达到预期目的——让最终呈现给用户的画面上不再存在缺失现象而是清晰可见每一个细节之处都经过精心打磨过的完美成品形象展现在眼前!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值